back_recharge
jiahuiwen 2019-01-28 19:00:51 +08:00
parent 815cfcd3c4
commit 80aa815e76
31 changed files with 1165 additions and 188 deletions

View File

@ -0,0 +1,2 @@
Id ComonpentsId Stage Cost BaseAttribute
int int int mut,int#int,2 mut,int#int,2

View File

@ -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

View File

@ -0,0 +1,2 @@
Id DifferDemonsId SkillId Cost
int int int mut,int#int,2

View File

@ -1,58 +1,26 @@
Id PropertyId Name Info Id PropertyId Style Score
int int string string int int int float
1 1 Hp 生命值 1 1 1 0
2 2 Attack 攻击力 2 2 1 10
3 3 PhysicalDefence 护甲 3 3 1 5
4 4 MagicDefence 魔抗 4 4 1 5
5 5 Speed 速度 5 5 1 5
6 51 DamageBocusFactor 伤害加成百分比 6 51 2 0
7 52 DamageReduceFactor 伤害减免百分比 7 52 2 0
8 53 Hit 效果命中率 8 53 2 5
9 54 Dodge 效果抵抗率 9 54 2 5
10 55 CritFactor 暴击率 10 55 2 5
11 56 CritDamageFactor 暴伤 11 56 2 0
12 57 TreatFacter 回复系数 12 57 2 0
13 101 FireDamageBonusFactor 火攻(% 13 101 2 30
14 102 WindDamageBonusFactor 风攻(% 14 102 2 30
15 103 WaterDamageBonusFactor 水攻(% 15 103 2 30
16 104 LandDamageBonusFactor 地攻(% 16 104 2 30
17 105 LightDamageBonusFactor 光攻(% 17 105 2 30
18 106 DarkDamageBonusFactor 暗攻(% 18 106 2 30
19 107 FireDamageReduceFactor 火抗(% 19 107 2 30
20 108 WindDamageReduceFactor 风抗(% 20 108 2 30
21 109 WaterDamageReduceFactor 水抗(% 21 109 2 30
22 110 LandDamageReduceFactor 地抗(% 22 110 2 30
23 111 LightDamageReduceFactor 光抗(% 23 111 2 30
24 112 DarkDamageReduceFactor 暗抗(% 24 112 2 30
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

View File

@ -1,5 +1,6 @@
package com.ljsd.jieling.config; package com.ljsd.jieling.config;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table; import com.ljsd.jieling.logic.Table;
@ -9,7 +10,7 @@ import java.util.TreeMap;
@Table(name = "HeroRankupConfig") @Table(name = "HeroRankupConfig")
public class SCHeroRankUpConfig implements BaseConfig{ 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; private int id;
@ -27,26 +28,30 @@ public class SCHeroRankUpConfig implements BaseConfig{
private int consumeMaterial[][]; private int consumeMaterial[][];
private int star;
@Override @Override
public void init() throws Exception { 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); Map<Integer, SCHeroRankUpConfig> config = STableManager.getConfig(SCHeroRankUpConfig.class);
for(SCHeroRankUpConfig scHeroRankUpConfig: config.values()){ for(SCHeroRankUpConfig scHeroRankUpConfig: config.values()){
int type = scHeroRankUpConfig.getType(); int type = scHeroRankUpConfig.getType();
if(!result.containsKey(type)){ if(!result.containsKey(type)){
result.put(type,new TreeMap<>()); result.put(type,new TreeMap<>());
} }
if(type == 1){ if(!result.get(type).containsKey(scHeroRankUpConfig.getStar())){
result.get(type).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig); result.get(type).put(scHeroRankUpConfig.getStar(),new HashMap<>());
}else{
result.get(type).put(scHeroRankUpConfig.getLimitStar(),scHeroRankUpConfig);
} }
if(type == GlobalsDef.UP_STAR_TYPE){
result.get(type).get(scHeroRankUpConfig.getStar()).put(scHeroRankUpConfig.getLimitStar(),scHeroRankUpConfig);
}
result.get(type).get(scHeroRankUpConfig.getStar()).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig);
} }
scHeroRankUpConfigByType = result; scHeroRankUpConfigByStar = result;
} }
public static Map<Integer, SCHeroRankUpConfig> getScHeroRankUpConfigByType(int type) { public static Map<Integer, SCHeroRankUpConfig> getScHeroRankUpConfigByType(int type,int heroInitStar) {
return scHeroRankUpConfigByType.get(type); return scHeroRankUpConfigByStar.get(type).get(heroInitStar);
} }
public int getId() { public int getId() {
@ -80,4 +85,8 @@ public class SCHeroRankUpConfig implements BaseConfig{
public int[][] getConsumeMaterial() { public int[][] getConsumeMaterial() {
return consumeMaterial; return consumeMaterial;
} }
public int getStar() {
return star;
}
} }

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -60,11 +60,14 @@ public class SGameSetting implements BaseConfig {
return actionPowerRormula; return actionPowerRormula;
} }
public float calSpeed(float speed, int level){ public float calSpeed(float speed, int breakTimes){
if(breakTimes == 0){
return 0;
}
float result = speed; float result = speed;
int length = speedFormula.length; int length = speedFormula.length;
for(int i=0;i< speedFormula.length;i++){ for(int i=0;i< speedFormula.length;i++){
double pow = Math.pow(level, --length); double pow = Math.pow(breakTimes, --length);
result += speedFormula[i]*pow; result += speedFormula[i]*pow;
} }
return result; return result;

View File

@ -16,6 +16,8 @@ public class SHeroLevlConfig implements BaseConfig{
private float characterLevelPara; private float characterLevelPara;
private float speedLevelPara;
private int[][] consume; private int[][] consume;
@ -49,4 +51,8 @@ public class SHeroLevlConfig implements BaseConfig{
public int[][] getConsume() { public int[][] getConsume() {
return consume; return consume;
} }
public float getSpeedLevelPara() {
return speedLevelPara;
}
} }

View File

@ -14,7 +14,11 @@ public class SItem implements BaseConfig {
private int itemType; private int itemType;
private int itemBaseType; //道具类型(该道具在哪个背包显示) private int itemBaseType; //道具类型(该道具在哪个背包显示)
private int quantity; 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 @Override
public void init() throws Exception { public void init() throws Exception {
@ -45,7 +49,23 @@ public class SItem implements BaseConfig {
return quantity; return quantity;
} }
public boolean isStacking() { public int[] getPrice() {
return isStacking; return price;
}
public int getUseType() {
return useType;
}
public int getRewardGroup() {
return rewardGroup;
}
public int getUsePerCount() {
return usePerCount;
}
public boolean isIsopen() {
return isopen;
} }
} }

View File

@ -3,6 +3,7 @@ package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table; import com.ljsd.jieling.logic.Table;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Table(name ="PropertyConfig") @Table(name ="PropertyConfig")
@ -12,18 +13,31 @@ public class SPropertyConfig implements BaseConfig {
private int propertyId; private int propertyId;
private String name; private int style;
private String info; private float score;
private static Map<Integer,SPropertyConfig> sPropertyConfigByPIDMap;
@Override @Override
public void init() throws Exception { 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() { public int getId() {
return id; return id;
} }
@ -31,13 +45,11 @@ public class SPropertyConfig implements BaseConfig {
return propertyId; return propertyId;
} }
public String getName() { public int getStyle() {
return name; return style;
} }
public String getInfo() { public float getScore() {
return info; return score;
} }
} }

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table; import com.ljsd.jieling.logic.Table;
import com.ljsd.jieling.util.ItemUtil;
import java.util.Map; import java.util.Map;
@ -26,6 +27,8 @@ public class SRewardGroup implements BaseConfig {
@Override @Override
public void init() throws Exception { public void init() throws Exception {
sRewardItemMap = STableManager.getConfig(SRewardGroup.class); sRewardItemMap = STableManager.getConfig(SRewardGroup.class);
ItemUtil.initDropReward();
} }

View File

@ -2,6 +2,7 @@ package com.ljsd.jieling.config;
import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.logic.STableManager;
import com.ljsd.jieling.logic.Table; import com.ljsd.jieling.logic.Table;
import com.ljsd.jieling.util.ItemUtil;
import java.util.Map; import java.util.Map;
@ -11,13 +12,14 @@ public class SRewardItem implements BaseConfig {
private int id; private int id;
private int itemId; private int itemId;
private int chance; //获取概率 private int chance; //获取概率
private int growChance; //成长概率 针对特殊处理,如果不获取,则获取概率增加 private float growChance; //成长概率 针对特殊处理,如果不获取,则获取概率增加
private int randomMin; //获取数量最小值 private int randomMin; //获取数量最小值
private int randomMax; //获取数量最大值 private int randomMax; //获取数量最大值
@Override @Override
public void init() throws Exception { public void init() throws Exception {
sDropMap = STableManager.getConfig(SRewardItem.class); sDropMap = STableManager.getConfig(SRewardItem.class);
ItemUtil.initDropReward();
} }
@ -37,7 +39,7 @@ public class SRewardItem implements BaseConfig {
return chance; return chance;
} }
public int getGrowChance() { public float getGrowChance() {
return growChance; return growChance;
} }

View File

@ -13,4 +13,12 @@ public interface GlobalsDef {
int MAGIC_DEFENCE_TYPE =4; int MAGIC_DEFENCE_TYPE =4;
int SPEED_TYPE =5; int SPEED_TYPE =5;
//
int RANKUP_PARA_TYPE =1;
int BREAK_PARA_TYPE =2;
// 属性加成类型
int ABSOLUTE_TYPE =1; // 绝对值
int PERCENT_TYPE =2; // 百分比
} }

View File

@ -2,9 +2,9 @@ package com.ljsd.jieling.globals;
public interface GlobalItemType { public interface GlobalItemType {
//掉落物品类型 //掉落物品类型
int ALL_DROP = 0; //全部掉落 int ALL_DROP = 1; //全部掉落
int WEIGHT_DROP = 1; //随机掉落 int WEIGHT_DROP = 2; //随机掉落
int SUCCESSIVELY_RANDOM = 2; // 依次随机 int SUCCESSIVELY_RANDOM = 3; // 依次随机
// 物品类型 // 物品类型
int GEM = 3; // 钻石Id(充值获得) int GEM = 3; // 钻石Id(充值获得)
@ -12,5 +12,10 @@ public interface GlobalItemType {
int CARD = 1; // 卡牌 int CARD = 1; // 卡牌
int CARD_FRAGMENT = 2; // 卡牌碎片 int CARD_FRAGMENT = 2; // 卡牌碎片
int EQUIP = 3; //装备 int EQUIP = 3; //装备
int RANDOM_ITME = 5; // 随机道具
//物品使用类型
int NO_USE = 0 ; //不使用
int RANDOM_USE = 1; // 随机使用
} }

View File

@ -1,6 +1,6 @@
package com.ljsd.jieling.handler; 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.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
@ -31,7 +31,7 @@ public class GetAllMailHandler extends BaseHandler {
int msgIndex = netData.getIndex(); int msgIndex = netData.getIndex();
LOGGER.info("processMessage->uid={},token={},msgId={},msgIndex={}", LOGGER.info("processMessage->uid={},token={},msgId={},msgIndex={}",
userId, 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() PlayerInfoProto.GetAllMailInfoResponse getPlayerInfoResponse = PlayerInfoProto.GetAllMailInfoResponse.newBuilder()
.addAllMialList(allUserMail) .addAllMialList(allUserMail)
.build(); .build();

View File

@ -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);
}
}

View File

@ -4,8 +4,7 @@ import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -31,7 +30,7 @@ public class ReadMailHandler extends BaseHandler {
userId, token,msgId,msgIndex); userId, token,msgId,msgIndex);
PlayerInfoProto.MailReadRequest mailReadRequest = PlayerInfoProto.MailReadRequest.parseFrom(message); PlayerInfoProto.MailReadRequest mailReadRequest = PlayerInfoProto.MailReadRequest.parseFrom(message);
String mailId = mailReadRequest.getMailId(); String mailId = mailReadRequest.getMailId();
MailUtil.getInstance().readMail(iSession,mailId); MailLogic.getInstance().readMail(iSession,mailId);
} }
} }

View File

@ -5,7 +5,7 @@ import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto; 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 com.ljsd.jieling.util.MessageUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -34,7 +34,7 @@ public class TakeMailHandler extends BaseHandler {
userId, token,msgId,msgIndex); userId, token,msgId,msgIndex);
PlayerInfoProto.TakeMailRequest takeMailRequest = PlayerInfoProto.TakeMailRequest.parseFrom(message); PlayerInfoProto.TakeMailRequest takeMailRequest = PlayerInfoProto.TakeMailRequest.parseFrom(message);
List<String> mailIdsList = takeMailRequest.getMailIdsList(); 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() PlayerInfoProto.TakeMailResponse takeMailResponse = PlayerInfoProto.TakeMailResponse.newBuilder()
.setDrop(dropBuilder) .setDrop(dropBuilder)
.buildPartial(); .buildPartial();

View File

@ -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);
}
}
}

View File

@ -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;
}
}

View File

@ -52,7 +52,7 @@ public class Equip extends MongoBase {
this.secondValueByIdMap = getSecondValue(sEquipConfig.getPool(),secondValue); 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<>(); Map<Integer,Integer> result = new HashMap<>();
List<SEquipPropertyPool> sEquipPropertyPoolList = SEquipPropertyPool.getSEquipPropertyPool(poolId); List<SEquipPropertyPool> sEquipPropertyPoolList = SEquipPropertyPool.getSEquipPropertyPool(poolId);
int totalWeight = 0; int totalWeight = 0;
@ -114,4 +114,12 @@ public class Equip extends MongoBase {
updateString("heroId",heroId); updateString("heroId",heroId);
this.heroId = heroId; this.heroId = heroId;
} }
public Map<Integer, Integer> getPropertyValueByIdMap() {
return propertyValueByIdMap;
}
public Map<Integer, Integer> getSecondValueByIdMap() {
return secondValueByIdMap;
}
} }

View File

@ -2,7 +2,7 @@ package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.LjsdMongoTemplate; 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 com.ljsd.jieling.util.TimeUtils;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
@ -28,7 +28,7 @@ public class MailingSystemManager {
int nowTime = (int)(TimeUtils.now()/1000); int nowTime = (int)(TimeUtils.now()/1000);
mailingSystem.getSysMailManager().addSystemMail(new SysMail(1)); mailingSystem.getSysMailManager().addSystemMail(new SysMail(1));
MailingSystemManager.ljsdMongoTemplate.lastUpdate(); 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");
} }
} }

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -23,6 +23,8 @@ public class User extends MongoRoot {
private AdventureManager adventureManager; private AdventureManager adventureManager;
private PokemonManager pokemonManager;
public User(int uid, PlayerManager playerManager, ItemManager itemManager, public User(int uid, PlayerManager playerManager, ItemManager itemManager,
@ -37,6 +39,7 @@ public class User extends MongoRoot {
this.mailManager = new MailManager(); this.mailManager = new MailManager();
this.equipManager = new EquipManager(); this.equipManager = new EquipManager();
this.adventureManager = new AdventureManager(); this.adventureManager = new AdventureManager();
this.pokemonManager = new PokemonManager();
//綁定关系 //綁定关系
this.playerManager.init(this, "playerManager", false); this.playerManager.init(this, "playerManager", false);
@ -47,6 +50,7 @@ public class User extends MongoRoot {
this.mailManager.init(this,"mailManager",false); this.mailManager.init(this,"mailManager",false);
this.equipManager.init(this,"equipManager",false); this.equipManager.init(this,"equipManager",false);
this.adventureManager.init(this,"adventureManager",false); this.adventureManager.init(this,"adventureManager",false);
this.pokemonManager.init(this,"pokemonManager",false);
} }
public User(){ public User(){
@ -57,6 +61,7 @@ public class User extends MongoRoot {
this.mapManager = new MapManager(); this.mapManager = new MapManager();
this.equipManager = new EquipManager(); this.equipManager = new EquipManager();
this.adventureManager = new AdventureManager(); this.adventureManager = new AdventureManager();
this.pokemonManager = new PokemonManager();
//綁定关系 //綁定关系
playerManager.init(this, "playerManager", false); playerManager.init(this, "playerManager", false);
itemManager.init(this, "itemManager", false); itemManager.init(this, "itemManager", false);
@ -64,6 +69,7 @@ public class User extends MongoRoot {
mapManager.init(this, "mapManager", false); mapManager.init(this, "mapManager", false);
equipManager.init(this,"equipManager",false); equipManager.init(this,"equipManager",false);
adventureManager.init(this,"adventureManager",false); adventureManager.init(this,"adventureManager",false);
adventureManager.init(this,"pokemonManager",false);
} }
public static void init(LjsdMongoTemplate ljsdMongoTemplate) { public static void init(LjsdMongoTemplate ljsdMongoTemplate) {
@ -134,4 +140,8 @@ public class User extends MongoRoot {
public AdventureManager getAdventureManager() { public AdventureManager getAdventureManager() {
return adventureManager; return adventureManager;
} }
public PokemonManager getPokemonManager() {
return pokemonManager;
}
} }

View File

@ -125,7 +125,7 @@ public class CombatLogic {
cacheHeroTid.add(templateId); cacheHeroTid.add(templateId);
myRecommendHeroSize++; myRecommendHeroSize++;
} }
totalForce += HeroLogic.getInstance().calHeoForce(hero); totalForce += HeroLogic.getInstance().calHeoForce(user,hero);
} }

View File

@ -3,7 +3,9 @@ package com.ljsd.jieling.logic.hero;
import com.ljsd.GameApplication; import com.ljsd.GameApplication;
import com.ljsd.jieling.config.*; import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.GlobalsDef; import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.dao.*; import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.item.ItemLogic;
import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto; import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.HeroInfoProto; import com.ljsd.jieling.protocols.HeroInfoProto;
@ -13,6 +15,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class HeroLogic { public class HeroLogic {
private static final Logger LOGGER = LoggerFactory.getLogger(HeroLogic.class); private static final Logger LOGGER = LoggerFactory.getLogger(HeroLogic.class);
@ -113,12 +116,10 @@ public class HeroLogic {
} }
if( itemType == 2) { if( itemType == 2) {
Item item = itemManager.getItem(itemId); Item item = itemManager.getItem(itemId);
if (item == null){ if (item == null) {
item = itemManager.newItem(itemId, itemNum); item = itemManager.newItem(itemId, itemNum);
}else{ } else {
if(sItem.isStacking()){ item.setItemNum(item.getItemNum() + itemNum);
item.setItemNum(item.getItemNum() + itemNum);
}
} }
items.add(CBean2Proto.getItem(item)); items.add(CBean2Proto.getItem(item));
} }
@ -215,10 +216,11 @@ public class HeroLogic {
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_LEVEL_RESPONSE_VALUE,""); MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_LEVEL_RESPONSE_VALUE,"");
return; return;
} }
SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
int oldLevel = hero.getLevel(); 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); SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldLevel);
boolean isBreak =false; boolean isBreak =false;
int[][] consume; int[][] consume;
@ -268,9 +270,15 @@ public class HeroLogic {
MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,""); MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.UP_HERO_STAR_RESPONSE_VALUE,"");
return; return;
} }
int oldStar = targetHero.getStar();
int oldStar = targetHero.getStar();
SCHero scHero = SCHero.getsCHero().get(targetHero.getTemplateId()); 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); Map<Integer,SCHero.ConsumeMaterialInfo> consumeMaterialInfoByPosition = scHero.getConsumeMaterialInfoOfPositionByStar(oldStar + 1);
boolean canUse = true; boolean canUse = true;
List<String> removeHeroIds = new ArrayList<>(); List<String> removeHeroIds = new ArrayList<>();
@ -324,11 +332,10 @@ public class HeroLogic {
} }
if(!canUse){ 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; return;
} }
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByType = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE);
SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByType.get(oldStar);
int[][] consumeMaterial = scHeroRankUpConfig.getConsumeMaterial(); int[][] consumeMaterial = scHeroRankUpConfig.getConsumeMaterial();
boolean enoughCost = ItemUtil.itemCost(user, consumeMaterial); boolean enoughCost = ItemUtil.itemCost(user, consumeMaterial);
if(!enoughCost){ if(!enoughCost){
@ -354,39 +361,68 @@ public class HeroLogic {
} }
//初始属性*1+化境增长)*等级系数 + 初始属性*突破系数 //初始属性*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(); int templateId = hero.getTemplateId();
SCHero scHero = SCHero.getsCHero().get(templateId); SCHero scHero = SCHero.getsCHero().get(templateId);
float baseValue = getBaseValueByType(scHero,type); 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(); private Map<Integer,Float> getParaForHero(Hero hero){
//计算化境增长 Map<Integer,Float> result = new HashMap<>(2);
Map<Integer, SCHeroRankUpConfig> scHeroRankUpConfigByTypeOfStar = SCHeroRankUpConfig.getScHeroRankUpConfigByType(GlobalsDef.UP_STAR_TYPE); 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()); SCHeroRankUpConfig scHeroRankUpConfig = scHeroRankUpConfigByTypeOfStar.get(hero.getStar());
float rankupPara =0.0f; float rankupPara =0.0f;
if( scHeroRankUpConfig!=null ){ if( scHeroRankUpConfig!=null ){
rankupPara = scHeroRankUpConfig.getRankupPara(); rankupPara = scHeroRankUpConfig.getRankupPara();
} }
//突破系数 //突破系数
float breakPara = 0.0f; float breakPara = 0.0f;
int heroLevel = hero.getLevel(); 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()){ for( SCHeroRankUpConfig scHeroRankUpConfigTmp :scHeroRankUpConfigByTypOfBreak.values()){
if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() ){ if( heroLevel >= scHeroRankUpConfigTmp.getLimitLevel() && hero.getBreakId()>= scHeroRankUpConfigTmp.getId()){
breakPara = scHeroRankUpConfigTmp.getRankupPara(); breakPara = scHeroRankUpConfigTmp.getRankupPara();
} }
if(heroLevel <= scHeroRankUpConfigTmp.getOpenLevel()){ if(heroLevel <= scHeroRankUpConfigTmp.getOpenLevel()){
break; break;
} }
} }
result.put(GlobalsDef.RANKUP_PARA_TYPE,rankupPara);
if(type == GlobalsDef.SPEED_TYPE){ result.put(GlobalsDef.BREAK_PARA_TYPE,breakPara);
return SGameSetting.getGameSetting().calSpeed(baseValue,heroLevel); return result;
}
return baseValue * ( 1 + rankupPara/10000.f) + characterLevelPara * breakPara;
} }
private float getBaseValueByType(SCHero scHero,int type){ private float getBaseValueByType(SCHero scHero,int type){
@ -413,13 +449,42 @@ public class HeroLogic {
} }
//todo 计算英雄战斗力 战斗力 = 生命*0.7 + (护甲 + 魔坑)*5 + 攻击 *10 + (暴击率 + 效果命中率 *5 +(属性攻击率 + 属性防御率)*30 public int calHeoForce(User user, Hero hero){
public int calHeoForce(Hero hero){ Map<Integer, Integer> heroAllAttribute = calHeroAllAttribute(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; Collection<String> values = hero.getEquipByPositionMap().values();
//todo 计算装备加成 EquipManager equipManager = user.getEquipManager();
float equipAddForce =0.0f; for(String equipId:values){
int result = (int) (heroBaseForce + equipAddForce); Equip equip = equipManager.getEquipMap().get(equipId);
return result; 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); 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;
}
} }

View File

@ -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);
}
}

View File

@ -10,9 +10,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
public class ItemUtil { public class ItemUtil {
private static Map<Integer,String> dropRewardMap = new ConcurrentHashMap<>();
private static final Logger LOGGER = LoggerFactory.getLogger(ItemUtil.class); private static final Logger LOGGER = LoggerFactory.getLogger(ItemUtil.class);
//掉落 //掉落
public static CommonProto.Drop.Builder drop(User user, int[][] itemArr) throws Exception { 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> itemMap = new HashMap<>();
Map<Integer, Integer> cardMap = new HashMap<>(); Map<Integer, Integer> cardMap = new HashMap<>();
Map<Integer,Integer> equipMap = 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); addItem(user,itemMap,dropBuilder);
addCard(user,cardMap,dropBuilder); addCard(user,cardMap,dropBuilder);
addEquip(user,equipMap,dropBuilder); addEquip(user,equipMap,dropBuilder);
return 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){ 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> itemMap = new HashMap<>();
Map<Integer, Integer> cardMap = new HashMap<>(); Map<Integer, Integer> cardMap = new HashMap<>();
Map<Integer, Integer> equipMap = new HashMap<>(); Map<Integer, Integer> equipMap = new HashMap<>();
Map<Integer,Integer> randomMap = new HashMap<>();
for (int dropGroupId :dropGroupIds){ for (int dropGroupId :dropGroupIds){
SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId); SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId);
if (sRewardGroup == null){ if (sRewardGroup == null){
continue; continue;
} }
selectDrop(sRewardGroup,itemMap,cardMap,equipMap,dropRatio); selectDrop(sRewardGroup,itemMap,cardMap,equipMap,randomMap,dropRatio);
} }
useRandomItem(user,randomMap);
addItem(user,itemMap,dropBuilder); addItem(user,itemMap,dropBuilder);
addCard(user,cardMap,dropBuilder); addCard(user,cardMap,dropBuilder);
addEquip(user,equipMap,dropBuilder);
return dropBuilder; return dropBuilder;
} }
public static CommonProto.Drop.Builder drop(User user, Map<int [],Float> dropGroupAndRatioMap) throws Exception { public static CommonProto.Drop.Builder drop(User user, Map<int [],Float> dropGroupAndRatioMap) throws Exception {
@ -60,86 +69,81 @@ public class ItemUtil {
} }
return dropBuilder; return dropBuilder;
} }
private static void selectDrop(SRewardGroup sRewardGroup,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) { private static void selectDrop(SRewardGroup sRewardGroup,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,Map<Integer,Integer> randomMap , float dropRatio) {
int[] rewardItem = sRewardGroup.getRewardItem(); String dropInfo = dropRewardMap.get(sRewardGroup.getId());
StringBuilder rewardStr = new StringBuilder(); String rewardStr = dropInfo.split("\\|")[0];
StringBuilder weight = new StringBuilder(); String weight = dropInfo.split("\\|")[1];
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());
}
}
switch (sRewardGroup.getIsUpset()) { switch (sRewardGroup.getIsUpset()) {
case GlobalItemType.ALL_DROP: case GlobalItemType.ALL_DROP:
getMap(StringUtil.parseFiledInt(rewardStr.toString()),itemMap,cardMap,equipMap,dropRatio); getMap(StringUtil.parseFiledInt(rewardStr),itemMap,cardMap,equipMap,randomMap,dropRatio);
break; break;
case GlobalItemType.WEIGHT_DROP: case GlobalItemType.WEIGHT_DROP:
getRandomMap(sRewardGroup.getRewardMaxNum(),rewardStr.toString().split("#"),weight.toString().split("#"), getRandomMap(sRewardGroup.getRewardMaxNum(),rewardStr.split("#"),weight.split("#"),
itemMap,equipMap,cardMap,dropRatio); itemMap,equipMap,cardMap,randomMap,dropRatio);
break; break;
case GlobalItemType.SUCCESSIVELY_RANDOM: case GlobalItemType.SUCCESSIVELY_RANDOM:
getSuccessivelyRandmoMap(sRewardGroup,rewardStr.toString().split("#"),weight.toString().split("#"), getSuccessivelyRandmoMap(sRewardGroup,rewardStr.split("#"),weight.split("#"),
itemMap,cardMap,equipMap,dropRatio); itemMap,cardMap,equipMap,randomMap,dropRatio);
break; break;
default: default:
break; break;
} }
} }
private static void getSuccessivelyRandmoMap(SRewardGroup sRewardGroup,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap, private static void getSuccessivelyRandmoMap(SRewardGroup sRewardGroup,String[]
Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) { 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++){ for (int i = 0 ; i < sRewardGroup.getRewardMaxNum();i++){
int itemId = 0; int id = 0;
for (int j = 0 ; j < sRewardGroup.getLoop();i++){ for (int j = 0 ; j < sRewardGroup.getLoop();i++){
int index = MathUtils.randomForStrArray(weightArr); int index = MathUtils.randomForStrArray(weightArr);
itemId = Integer.parseInt(rewardArr[index]); id = Integer.parseInt(rewardArr[index]);
if (itemId ==Integer.parseInt(rewardArr[j])){ if (id ==Integer.parseInt(rewardArr[j])){
break; break;
} }
} }
if (0 == itemId){ if (0 == id){
int index = MathUtils.randomForStrArray(weightArr); int index = MathUtils.randomForStrArray(weightArr);
itemId = Integer.parseInt(rewardArr[index]); id = Integer.parseInt(rewardArr[index]);
} }
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId); SRewardItem sRewardItem = SRewardItem.getsDropMap().get(id);
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax()); int itemNum = getItemNum(sRewardItem);
getMap(itemId,itemNum ,itemMap, cardMap,equipMap,dropRatio); 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, 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++){ for (int i = 0 ; i < randomItemNum;i++){
int index = MathUtils.randomForStrArray(weightArr); int index = MathUtils.randomForStrArray(weightArr);
int itemId = Integer.parseInt(rewardArr[index]); int id = Integer.parseInt(rewardArr[index]);
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId); SRewardItem sRewardItem = SRewardItem.getsDropMap().get(id);
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax()); int itemNum = getItemNum(sRewardItem);
getMap(itemId,itemNum, itemMap, cardMap,equipMap,dropRatio); 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); * @param sRewardItem
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax()); * @return
getMap(itemId,itemNum,itemMap, cardMap,equipMap,dropRatio); */
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); SItem sItem = SItem.getsItemMap().get(itemId);
int itemType =getItemType(sItem.getItemType()); int itemType =getItemType(sItem);
switch (itemType) { switch (itemType) {
case GlobalItemType.ITEM: case GlobalItemType.ITEM:
putcountMap(itemId,MathUtils.numRount((itemNum * dropRatio)) , itemMap); putcountMap(itemId,MathUtils.numRount((itemNum * dropRatio)) , itemMap);
@ -150,16 +154,25 @@ public class ItemUtil {
case GlobalItemType.EQUIP: case GlobalItemType.EQUIP:
putcountMap(itemId, itemNum, cardMap); putcountMap(itemId, itemNum, cardMap);
break; break;
case GlobalItemType.RANDOM_ITME:
putcountMap(itemId, itemNum, randomMap);
break;
default: default:
break; break;
} }
} }
private static int getItemType(int itemType) { private static int getItemType(SItem sItem) {
switch (itemType) { int itemType = sItem.getItemType();
switch (sItem.getItemType()) {
case GlobalItemType.CARD_FRAGMENT: case GlobalItemType.CARD_FRAGMENT:
itemType = GlobalItemType.ITEM; itemType = GlobalItemType.ITEM;
break; break;
case GlobalItemType.RANDOM_ITME:
if (!sItem.isIsopen()){
itemType = GlobalItemType.ITEM;
}
break;
default: default:
break; break;
} }
@ -185,12 +198,10 @@ public class ItemUtil {
continue; continue;
} }
Item item = itemManager.getItem(entry.getKey()); Item item = itemManager.getItem(entry.getKey());
if (item == null){ if (item == null) {
item = itemManager.newItem(entry.getKey(), entry.getValue()); item = itemManager.newItem(entry.getKey(), entry.getValue());
}else{ } else {
if(sItem.isStacking()){ item.setItemNum(item.getItemNum() + entry.getValue());
item.setItemNum(item.getItemNum() + entry.getValue());
}
} }
itemProtoList.add(CBean2Proto.getItem(item)); itemProtoList.add(CBean2Proto.getItem(item));
} }
@ -342,7 +353,7 @@ public class ItemUtil {
int itemId = costItem[0]; int itemId = costItem[0];
int itemNum = costItem[1]; int itemNum = costItem[1];
SItem sItem = SItem.getsItemMap().get(itemId); SItem sItem = SItem.getsItemMap().get(itemId);
int itemType = getItemType(sItem.getItemType()); int itemType = getItemType(sItem);
switch (itemType) { switch (itemType) {
case GlobalItemType.GEM: case GlobalItemType.GEM:
putcountMap(itemId,itemNum,moneyMap); 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;
}
} }