需求:gm可查询最早晋升神尊11、12级得三人

back_recharge
duhui 2022-12-08 16:33:13 +08:00
parent ddf90096dc
commit 2aa1651e99
7 changed files with 173 additions and 160 deletions

View File

@ -381,6 +381,8 @@ public class RedisKey {
public static final String GM_ACTIVITY_INFO = "GM_ACTIVITY_INFO";//GM活动信息
public static final String GOD_LEVEL_UP_TIME = "GOD_LEVEL_UP_TIME";//晋升神尊等级排序
public static Set<String> familyKey = new HashSet<>();
/**
* 01

View File

@ -3,11 +3,11 @@ package com.ljsd.jieling.handler;
import com.ljsd.jieling.logic.mail.MailLogic;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import rpc.protocols.MessageTypeProto;
import rpc.protocols.PlayerInfoProto;
import java.util.List;
@ -28,6 +28,5 @@ public class TakeMailHandler extends BaseHandler {
PlayerInfoProto.TakeMailRequest takeMailRequest = PlayerInfoProto.TakeMailRequest.parseFrom(message);
List<String> mailIdsList = takeMailRequest.getMailIdsList();
MailLogic.getInstance().takeMail(iSession,mailIdsList, userId);
}
}

View File

@ -0,0 +1,84 @@
package com.ljsd.jieling.jbean.gm;
import com.ljsd.GameApplication;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.player.PlayerLogic;
import util.TimeUtils;
/**
* @Author hj
* @Date 2022/12/8 16:00:38
* @Description:
* @Version 1.0
*/
public class UserGodLvVo {
//角色id
private int uid;
//角色名称
private String name;
//区服id
private String serverId;
//创角时间
private String createTime;
//神尊等级
private int godLv;
//神尊等级到达时间
private String upTime;
public UserGodLvVo(User user) {
this.uid = user.getId();
this.name = user.getPlayerInfoManager().getNickName();
this.serverId = String.valueOf(GameApplication.serverId);
this.createTime = TimeUtils.getTimeStamp2(user.getPlayerInfoManager().getCreateTime());
this.godLv = PlayerLogic.getInstance().getGodPrivilegeLv(user);
this.upTime = TimeUtils.getTimeStamp2(TimeUtils.now());
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getServerId() {
return serverId;
}
public void setServerId(String serverId) {
this.serverId = serverId;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public int getGodLv() {
return godLv;
}
public void setGodLv(int godLv) {
this.godLv = godLv;
}
public String getUpTime() {
return upTime;
}
public void setUpTime(String upTime) {
this.upTime = upTime;
}
}

View File

@ -304,6 +304,7 @@ public class GlobalDataManaager implements IManager {
new SummonTreasureHandler();
new ArchitectureUnLockHandler();
new SaveHeroForceEventHandler();
new AddItemHandler();
new GmActivityLogic();
ChampionshipLogic.minuteCheck(true);
GuildFightLogic.minuteCheckForCarFight();

View File

@ -4,20 +4,20 @@ import java.util.Map;
public class AddItemEvent implements IEvent {
private int useId;
Map<Integer, Integer> useItemMap;
private int userId;
Map<Integer, Long> useItemMap;
public AddItemEvent(int useId, Map<Integer, Integer> useItemMap) {
this.useId = useId;
public AddItemEvent(int userId, Map<Integer, Long> useItemMap) {
this.userId = userId;
this.useItemMap = useItemMap;
}
public Map<Integer, Integer> getUseItemMap() {
public Map<Integer, Long> getUseItemMap() {
return useItemMap;
}
public int getUseId() {
return useId;
public int getUserId() {
return userId;
}
}

View File

@ -0,0 +1,45 @@
package com.ljsd.jieling.logic.activity.eventhandler;
import com.ljsd.GameApplication;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.jbean.gm.UserGodLvVo;
import com.ljsd.jieling.logic.activity.IEventHandler;
import com.ljsd.jieling.logic.activity.event.AddItemEvent;
import com.ljsd.jieling.logic.activity.event.IEvent;
import com.ljsd.jieling.logic.activity.event.Poster;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.player.PlayerLogic;
/**
* @author lvxinran
* @date 2020/1/7
* @discribe
*/
public class AddItemHandler implements IEventHandler{
public AddItemHandler() {
Poster.getPoster().listenEvent(this, AddItemEvent.class);
}
@Override
public void onEvent(IEvent event) throws Exception {
if (!(event instanceof AddItemEvent)) {
return;
}
AddItemEvent itemEvent = (AddItemEvent) event;
User user = UserManager.getUser(itemEvent.getUserId());
// 包含神尊经验道具,itemId:1352
if (itemEvent.getUseItemMap().containsKey(1352)){
int lv = PlayerLogic.getInstance().getGodPrivilegeLv(user);
String key = RedisKey.GOD_LEVEL_UP_TIME + ":" + GameApplication.serverId + ":" + lv;
String uid = String.valueOf(user.getId());
UserGodLvVo userGodLvVo = RedisUtil.getInstence().getMapValue(key, uid, UserGodLvVo.class);
if (userGodLvVo == null){
userGodLvVo = new UserGodLvVo(user);
RedisUtil.getInstence().putMapEntry(key, uid, userGodLvVo);
}
}
}
}

View File

@ -712,144 +712,7 @@ public class ItemUtil {
* @throws Exception
*/
public static void addItem(User user, Map<Integer, Long> itemMap,CommonProto.Drop.Builder dropBuilder,int reason) throws Exception {
if (itemMap.isEmpty()) {
return;
}
EquipManager equipManager=user.getEquipManager();
List<CommonProto.Item> itemProtoList = new CopyOnWriteArrayList<>();
ItemManager itemManager = user.getItemManager();
List<CommonProto.Item> sendToFront = new CopyOnWriteArrayList<>();
//超过上限不能直接获得
Map<Integer,Integer> extraItem = new HashMap<>(itemMap.size());
List<Integer>changeEquipList=null;
for (Map.Entry<Integer, Long> entry : itemMap.entrySet()) {
SItem sItem = SItem.getsItemMap().get (entry.getKey());
if (sItem.getItemBaseType()==6){
equipManager.addEquipList(entry.getKey());
}
if (sItem.getItemType()==3 && reason != BIReason.EQUIP_UNLOAD_REWARD
&& reason != BIReason.UPHERO_DECOMPOS_HERO_REWARD && reason != BIReason.DECOMPOS_HERO_REWARD){
if (changeEquipList==null) {
changeEquipList=new ArrayList<>();
}
itemManager.setEquipBookMap(entry.getKey(),entry.getValue());
changeEquipList.add(entry.getKey());
}
long itemNumlimit = sItem.getItemNumlimit();
long itemNum = entry.getValue().intValue();
if(itemNum <= 0){
continue;
}
if (itemNum >= itemNumlimit){
itemNum = itemNumlimit;
}
Item item = itemManager.getItem(entry.getKey());
if (item == null) {
item = itemManager.newItem(entry.getKey(), itemNum);
} else {
if(sItem.getId()==Global.MISSING_ROOM_ITEM&&reason==BIReason.ADVENTURE_BASE_REWARD){
itemNumlimit = SPlayerLevelConfig.getsPlayerLevelConfigMap().get(user.getPlayerInfoManager().getLevel()).getMazeTreasureMax();
}
//数量超过了
if(item.getItemNum()> itemNumlimit){
//如果是寻龙玉,直接返回不给
if(sItem.getId()==Global.MISSING_ROOM_ITEM&&reason==BIReason.ADVENTURE_BASE_REWARD){
continue;
}
if(reason==BIReason.TAKE_MAIL_REWARD){
throw new ErrorCodeException(ErrorCode.BAG_FULL);
}else{
extraItem.put(entry.getKey(), (int) (extraItem.getOrDefault(entry.getKey(),0)+entry.getValue()));
}
continue;
}
if (item.getItemNum() + entry.getValue() > itemNumlimit){
if(sItem.getId()==Global.MISSING_ROOM_ITEM&&reason==BIReason.ADVENTURE_BASE_REWARD){
item.setItemNum((int) (item.getItemNum() + entry.getValue()));
}else{
if(reason==BIReason.TAKE_MAIL_REWARD){
throw new ErrorCodeException(ErrorCode.BAG_FULL);
}else{
extraItem.put(entry.getKey(), (int) (extraItem.getOrDefault(entry.getKey(),0)+entry.getValue()));
continue;
}
}
}else{
item.setItemNum(item.getItemNum() + entry.getValue());
}
}
if(itemNum>=0){
itemProtoList.add(CBean2Proto.getItem(item,itemNum));
}
// 触发任务,东海寻仙
if (sItem.getItemType() == GlobalItemType.TRANSFORMATION_CARD){
long count = itemNum;
while (count >= Integer.MAX_VALUE){
user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),Integer.MAX_VALUE);
count-=Integer.MAX_VALUE;
}
user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),(int)count);
}
// ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId());
int eventType = ParamEventBean.UserItemEvent;
if(currencyMap.contains(entry.getKey())){
eventType = ParamEventBean.UserCurrencyEvent;
}
KtEventUtils.onKtEvent(user, eventType,reason,GlobalsDef.addReason,entry.getKey(),itemNum,item.getItemNum());
baseItemReport(user,item.getItemId(),(int)itemNum,1,reason);
if(sItem.getId() == Global.EXP){
userLevelUp(user,itemNum);
}
if(sItem.getId() == Global.TREASURE_SCORE){
treasureLevelUp(user);
}
extraDropAop(user,dropBuilder,sItem);
sendToFront.add(CBean2Proto.getItem(item,-1));
if(sItem.getItemType()==GlobalItemType.EQUIP){
if(reason!=BIReason.EQUIP_UNLOAD_REWARD&&reason!=BIReason.DECOMPOS_HERO_REWARD&&reason!=BIReason.UPHERO_DECOMPOS_HERO_REWARD){
user.getUserMissionManager().onGameEvent(user,GameEvent.GET_EQUIP,sItem.getId(),(int)itemNum);
ReportUtil.onReportEvent(user,ReportEventEnum.GET_EQUIP.getType(),sItem.getId(),(int)itemNum,reason);
}
} else if (sItem.getItemType() == GlobalItemType.SOUL_MARK) {
user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), (int)itemNum);
}
if(sItem.getId()==Global.DAILY_TASK_REMOVE_ITEM){
user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,(int)itemNum,user);
}
//日志记录
ItemLogic.getInstance().addItemLog(new ItemLog(user,0,reason,item,itemNum));
}
//发送装备图鉴修改推送
SendEquipBookIndication(user.getId(),itemManager,changeEquipList);
for(Map.Entry<Integer,Integer> entry:extraItem.entrySet()){
itemProtoList.add(CBean2Proto.getItem(itemManager.getItemMap().get(entry.getKey()),entry.getValue()));
}
if (dropBuilder != null) {
dropBuilder.addAllItemlist(itemProtoList);
}
if(!sendToFront.isEmpty()||extraItem.size()>0){
MessageUtil.sendBagIndication(user.getId(),0,sendToFront,extraItem.size()>0);
}
if(extraItem.size()>0){
StringBuilder builder = new StringBuilder();
for(Map.Entry<Integer,Integer> entry:extraItem.entrySet()){
builder.append(entry.getKey()).append("#").append(entry.getValue());
String title = SErrorCodeEerverConfig.getI18NMessage("item_max_mail_title");
SItem item = SItem.getsItemMap().get(entry.getKey());
String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("item_max_mail_content",new String[]{item.getName(),String.valueOf(item.getItemNumlimit())},new int[]{1,0},"#");
MailLogic.getInstance().sendMail(user.getId(),title,content,builder.toString(),TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
builder = new StringBuilder();
}
}
addItemByMail(user,itemMap,dropBuilder,reason);
}
/**
@ -870,18 +733,17 @@ public class ItemUtil {
Map<Integer,Integer> extraItem = new HashMap<>(itemMap.size());
List<Integer>changeEquipList=null;
for (Map.Entry<Integer, Long> entry : itemMap.entrySet()) {
SItem sItem = SItem.getsItemMap().get(entry.getKey());
SItem sItem = SItem.getsItemMap().get (entry.getKey());
if (sItem.getItemBaseType()==6){
equipManager.addEquipList(entry.getKey());
}
if (sItem.getItemType()==3){
if (sItem.getItemType()==3 && reason != BIReason.EQUIP_UNLOAD_REWARD && reason != BIReason.UPHERO_DECOMPOS_HERO_REWARD && reason != BIReason.DECOMPOS_HERO_REWARD){
if (changeEquipList==null) {
changeEquipList=new ArrayList<>();
}
itemManager.setEquipBookMap(entry.getKey(),entry.getValue());
changeEquipList.add(entry.getKey());
}
long itemNumlimit = sItem.getItemNumlimit();
long itemNum = entry.getValue().intValue();
if(itemNum <= 0){
@ -931,8 +793,21 @@ public class ItemUtil {
itemProtoList.add(CBean2Proto.getItem(item,itemNum));
}
// 触发任务,东海寻仙
if (sItem.getItemType() == GlobalItemType.TRANSFORMATION_CARD){
long count = itemNum;
while (count >= Integer.MAX_VALUE){
user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),Integer.MAX_VALUE);
count-=Integer.MAX_VALUE;
}
user.getUserMissionManager().onGameEvent(user, GameEvent.DONGHAIXUNXIAN_UPDATE,MissionType.GET_TRANSFIGURATION_CARD_NUM,sItem.getQuantity(),(int)count);
}
ReportUtil.onReportEvent(user,ReportEventEnum.GET_ITEM.getType(),itemNum,String.valueOf(reason),item.getItemId());
int eventType = ParamEventBean.UserItemEvent;
if(currencyMap.contains(entry.getKey())){
eventType = ParamEventBean.UserCurrencyEvent;
}
KtEventUtils.onKtEvent(user, eventType,reason,GlobalsDef.addReason,entry.getKey(),itemNum,item.getItemNum());
baseItemReport(user,item.getItemId(),(int)itemNum,1,reason);
@ -947,18 +822,18 @@ public class ItemUtil {
if(sItem.getItemType()==GlobalItemType.EQUIP){
if(reason!=BIReason.EQUIP_UNLOAD_REWARD&&reason!=BIReason.DECOMPOS_HERO_REWARD&&reason!=BIReason.UPHERO_DECOMPOS_HERO_REWARD){
user.getUserMissionManager().onGameEvent(user,GameEvent.GET_EQUIP,sItem.getId(),(int)itemNum);
ReportUtil.onReportEvent(user,ReportEventEnum.GET_EQUIP.getType(),sItem.getId(),itemNum,reason);
ReportUtil.onReportEvent(user,ReportEventEnum.GET_EQUIP.getType(),sItem.getId(),(int)itemNum,reason);
}
} else if (sItem.getItemType() == GlobalItemType.SOUL_MARK) {
user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), itemNum);
}
if (sItem.getItemType() == GlobalItemType.SOUL_MARK) {
user.getUserMissionManager().onGameEvent(user, GameEvent.GOT_SOUL_MARK, sItem.getId(), (int)itemNum);
}
if(sItem.getId()==Global.DAILY_TASK_REMOVE_ITEM){
user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,itemNum,user);
user.getUserMissionManager().onGameEvent(user,GameEvent.DAILY_TASK_TYPE,(int)itemNum,user);
}
//日志记录
ItemLogic.getInstance().addItemLog(new ItemLog(user,0,reason,item,itemNum));
}
//发送装备图鉴修改推送
SendEquipBookIndication(user.getId(),itemManager,changeEquipList);
@ -968,6 +843,7 @@ public class ItemUtil {
if (dropBuilder != null) {
dropBuilder.addAllItemlist(itemProtoList);
}
if(!sendToFront.isEmpty()||extraItem.size()>0){
MessageUtil.sendBagIndication(user.getId(),0,sendToFront,extraItem.size()>0);
}
@ -977,15 +853,21 @@ public class ItemUtil {
builder.append(entry.getKey()).append("#").append(entry.getValue());
String title = SErrorCodeEerverConfig.getI18NMessage("item_max_mail_title");
SItem item = SItem.getsItemMap().get(entry.getKey());
String content = SErrorCodeEerverConfig.getI18NMessage("item_max_mail_content",new String[]{item.getName(),String.valueOf(item.getItemNumlimit())});
String content = SErrorCodeEerverConfig.getI18NMessageNeedConvert("item_max_mail_content",new String[]{item.getName(),String.valueOf(item.getItemNumlimit())},new int[]{1,0},"#");
MailLogic.getInstance().sendMail(user.getId(),title,content,builder.toString(),TimeUtils.nowInt(),Global.MAIL_EFFECTIVE_TIME);
builder = new StringBuilder();
}
}
Poster.getPoster().dispatchEvent(new AddItemEvent(user.getId(),itemMap));
return 1;
}
///发送装备图鉴修改推送
/**
*
* @param _uid
* @param _itemManage
* @param _equipList
*/
private static void SendEquipBookIndication(int _uid,ItemManager _itemManage, List<Integer>_equipList){
if (_equipList==null||_equipList.isEmpty())return;
List<CommonProto.EquipBookInfo>equipList=new ArrayList<>();