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

View File

@ -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);
}
result.get(type).get(scHeroRankUpConfig.getStar()).put(scHeroRankUpConfig.getLimitLevel(),scHeroRankUpConfig);
}
scHeroRankUpConfigByType = result;
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;
}
}

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

View File

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

View File

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

View File

@ -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,18 +13,31 @@ 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() {
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;
}
}

View File

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

View File

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

View File

@ -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; // 百分比
}

View File

@ -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; // 随机使用
}

View File

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

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

View File

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

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

View File

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

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

View File

@ -125,7 +125,7 @@ public class CombatLogic {
cacheHeroTid.add(templateId);
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.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,12 +116,10 @@ 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()){
item.setItemNum(item.getItemNum() + itemNum);
}
} 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,39 +361,68 @@ 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 ){
rankupPara = scHeroRankUpConfig.getRankupPara();
}
//突破系数
//突破系数
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;
}
}

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 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,12 +198,10 @@ 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()){
item.setItemNum(item.getItemNum() + entry.getValue());
}
} else {
item.setItemNum(item.getItemNum() + entry.getValue());
}
itemProtoList.add(CBean2Proto.getItem(item));
}
@ -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;
}
}