From 3a782c0cf0b9ed7addf228a8c94a9ae772d483a0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 06 十二月 2024 13:15:15 +0800 Subject: [PATCH] 10312 【越南】【英文】【bt】【砍树】查看跨服玩家数据向对应子服查询(修复查看玩家简要信息找不到玩家缓存数据时报错) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py | 56 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 37 insertions(+), 19 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py index b2f693e..531c787 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyRedPacket.py @@ -24,6 +24,7 @@ import ChPyNetSendPack import PlayerCompensation import PlayerDBGSEvent +import PlayerViewCache import PlayerControl import PlayerFamily import PyGameData @@ -78,6 +79,7 @@ #value4 moneyType #value5 getMoney #strValue1 名字 + #strValue2 face|facePic recData.SetValue1(grabObj.redPacketID) recData.SetValue2(grabObj.playerID) @@ -85,6 +87,7 @@ recData.SetValue4(grabObj.moneyType) recData.SetValue5(grabObj.getMoney) recData.SetStrValue1(grabObj.playerName) + recData.SetStrValue2('%s|%s' % (grabObj.face, grabObj.facePic)) return class RedPacketGrab(): @@ -97,6 +100,8 @@ self.playerName = "" self.moneyType = 0 self.getMoney = 0 + self.face = 0 + self.facePic = 0 return class RedPacketData(): @@ -356,11 +361,15 @@ if not redPacketObj: continue + strValue2List = recData.GetStrValue2().split('|') + grabObj = RedPacketGrab(redPacketID, playerID) grabObj.playerJob = recData.GetValue3() grabObj.playerName = recData.GetStrValue1() grabObj.moneyType = recData.GetValue4() grabObj.getMoney = recData.GetValue5() + grabObj.face = GameWorld.ToIntDef(strValue2List[0]) if len(strValue2List) > 0 else 0 + grabObj.facePic = GameWorld.ToIntDef(strValue2List[1]) if len(strValue2List) > 1 else 0 redPacketObj.grabDict[playerID] = grabObj @@ -422,6 +431,8 @@ playerCanGetIDList = [] for redPacketID in nowActiveRedPacketIDList: redPacketObj = redPacketMgr.GetRedPacketObj(redPacketID, False) + if not redPacketObj: + continue if playerID in redPacketObj.grabDict: continue playerCanGetIDList.append(redPacketID) @@ -446,6 +457,14 @@ PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSystemDayCount, 0) # 重置每日全服系统红包发放个数 RandTodayServerSystemRedPacketSendTime() return + +def GetRedPackGetWayType(getWay): + ## 获取红包getWay所属红包分类 + getWayTypeDict = IpyGameDataPY.GetFuncEvalCfg("RedPacketClassify", 1, {}) + for getWayType, getWayList in getWayTypeDict.items(): + if getWay in getWayList: + return getWayType + return ShareDefine.RedPackWayType_Family def CheckDelRedpacketData(): ## 检查红包删除红包,5分钟一次: 1-删除过期红包,2-删除已全部抢完的红包 @@ -711,6 +730,8 @@ for i in xrange(checkIndex + 1, len(nowActiveRedPacketIDList)): newCanGetRedID = nowActiveRedPacketIDList[i] newRedPacketObj = redPacketMgr.GetRedPacketObj(newCanGetRedID, False) + if not newRedPacketObj: + continue if playerID in newRedPacketObj.grabDict: continue if newCanGetRedID not in canGetIDList: @@ -957,7 +978,8 @@ PlayerDBGSEvent.SetDBGSTrig_ByKey(DBKey_RedPacketSend % redPackID, 1) GameWorld.DebugLog("定时发放的红包,设置已发放! redPackID=%s" % redPackID) - if getType == ShareDefine.RedPackType_Server: + getWayType = GetRedPackGetWayType(getType) + if getWayType == ShareDefine.RedPackWayType_Server: isAnonymous = 1 job = 0 @@ -983,11 +1005,7 @@ family = GameWorld.GetFamilyManager().FindFamily(familyID) if not family: return - packetCnt = min(packetCnt, family.GetCount()) -# if getType != 0: -# commonCntLimit = IpyGameDataPY.GetFuncCfg('FamilyRedPacketCnt') -# packetCnt = max(packetCnt, commonCntLimit) - + if outputNum < packetCnt: GameWorld.DebugLog(" 生成新仙盟红包 红包额度不能低该红包个数!outputNum=%s,redCnt=%s" % (outputNum, packetCnt)) return @@ -1059,21 +1077,14 @@ #通知 OnChangeRedPacketState(family, redPacketObj, None) - if getType == ShareDefine.RedPackType_OpenServer: - if not PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket): - PlayerControl.WorldNotify(0, 'OpenRedBag2', [playerName, data, outputNum]) - PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSRedPacket, 1) - elif data in IpyGameDataPY.GetFuncEvalCfg('OSRSuccess'): - PlayerControl.WorldNotify(0, 'OpenRedBag3', [playerName, data, outputNum]) - + if not familyID: #大于200额度的红包 getTypeRainDict = IpyGameDataPY.GetFuncEvalCfg('OpenServerRedPacketRain', 2, {}) if str(getType) in getTypeRainDict: PlayerControl.WorldNotify(0, getTypeRainDict[str(getType)]) - elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain') \ - and getType not in [ShareDefine.RedPackType_Server]: - PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType]) + elif outputNum >= IpyGameDataPY.GetFuncCfg('OpenServerRedPacketRain'): + PlayerControl.WorldNotify(0, 'OSRedpackSfx', [getType]) return redPacketObj @@ -1183,9 +1194,10 @@ GameWorld.ErrLog("领取的红包类型不一致,无法领取! reqGetWay=%s,getWay=%s" % (reqGetWay, getWay)) return - if getWay in [ShareDefine.RedPackType_OpenServer, ShareDefine.RedPackType_Server]: + getWayType = GetRedPackGetWayType(getWay) + if getWayType == ShareDefine.RedPackWayType_Server: getNumformula = IpyGameDataPY.GetFuncCompileCfg('OpenRedRacketOutNum') - elif getWay in ShareDefine.FeastRedPackType: + elif getWayType == ShareDefine.RedPackWayType_Feast: getNumformula = IpyGameDataPY.GetFuncCompileCfg('FeastRedPacket', 2) else: getNumformula = IpyGameDataPY.GetFuncCompileCfg('FamilyRedRacketOutNum') @@ -1200,6 +1212,8 @@ grabObj = RedPacketGrab(redPacketID, playerID) grabObj.playerJob = curPlayer.GetJob() grabObj.playerName = curPlayer.GetName() + grabObj.face = curPlayer.GetFace() + grabObj.facePic = curPlayer.GetFacePic() grabObj.moneyType = moneyType grabObj.getMoney = getMoney grabRecordDict[playerID] = grabObj @@ -1235,6 +1249,8 @@ grabInfo.Name = grabObj.playerName grabInfo.NameLen = len(grabInfo.Name) grabInfo.PlayeJob = grabObj.playerJob + grabInfo.Face = grabObj.face + grabInfo.FacePic = grabObj.facePic grabInfo.MoneyNum = grabObj.getMoney sendPack.GrabInfo.append(grabInfo) sendPack.Count = len(sendPack.GrabInfo) @@ -1292,7 +1308,7 @@ if isAll and state in [State_HasGot, State_HasAllGot]: #GameWorld.DebugLog(" 已抢或抢完的不发: redPacketID=%s,state=%s" % (redPacketID, state)) continue - + tagCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(redPacketObj.playerID)) packetInfo = ChPyNetSendPack.tagFRedPacketInfo() packetInfo.Clear() packetInfo.RedPacketID = redPacketObj.redPacketID @@ -1301,6 +1317,8 @@ packetInfo.NameLen = len(packetInfo.Name) packetInfo.Time = redPacketObj.createTime packetInfo.PlayeJob = redPacketObj.playerJob + packetInfo.Face = tagCacheDict.get("Face", 0) + packetInfo.FacePic = tagCacheDict.get("FacePic", 0) packetInfo.MoneyType = redPacketObj.moneyType packetInfo.MoneyNum = redPacketObj.moneyValue packetInfo.GetWay = redPacketObj.getWay -- Gitblit v1.8.0