|  |  |  | 
|---|
|  |  |  | import ShareDefine | 
|---|
|  |  |  | import CommFunc | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import time | 
|---|
|  |  |  | #--------------------------------------------------------------------- | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ( | 
|---|
|  |  |  | 
|---|
|  |  |  | ## 玩家登录 | 
|---|
|  |  |  | def OnPlayerLogin(curPlayer): | 
|---|
|  |  |  | __NotifyGoldLimt(curPlayer) | 
|---|
|  |  |  | NotifyOSRedPacket(curPlayer) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## OnDay处理 | 
|---|
|  |  |  | 
|---|
|  |  |  | def RedPacketOnDay(curPlayer, onEventType): | 
|---|
|  |  |  | if onEventType == ShareDefine.Def_OnEventType: | 
|---|
|  |  |  | #发钻石红包额度重置 | 
|---|
|  |  |  | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyRedPacketGoldLimit): | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, 0) | 
|---|
|  |  |  | __NotifyGoldLimt(curPlayer) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | elif onEventType == ShareDefine.Def_OnEventTypeEx: | 
|---|
|  |  |  | oscDay = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg') | 
|---|
|  |  |  | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) | 
|---|
|  |  |  | if openServerDay < oscDay: | 
|---|
|  |  |  | grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketCanGrabCnt, 0) | 
|---|
|  |  |  | sendCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 5) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, grabCnt+sendCnt) | 
|---|
|  |  |  | NotifyOSRedPacket(curPlayer) | 
|---|
|  |  |  | pass | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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 OnPlayerRecharge(curPlayer, orderCoin): | 
|---|
|  |  |  | ## 玩家充值 | 
|---|
|  |  |  | 
|---|
|  |  |  | getType = ipyData.GetGetType() | 
|---|
|  |  |  | if not getType: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | if getType == ShareDefine.RedPackType_OpenServer: | 
|---|
|  |  |  | oscDay = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg') | 
|---|
|  |  |  | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) | 
|---|
|  |  |  | if openServerDay >= oscDay: | 
|---|
|  |  |  | GameWorld.DebugLog('    发开服红包,活动已过,不可发送!') | 
|---|
|  |  |  | return | 
|---|
|  |  |  | isFamilyRedPacket = False | 
|---|
|  |  |  | elif getType == ShareDefine.RedPackType_FeastSucc: | 
|---|
|  |  |  | getWayType = GetRedPackGetWayType(getType) | 
|---|
|  |  |  | if getWayType == ShareDefine.RedPackWayType_Feast: | 
|---|
|  |  |  | if not PlayerFeastRedPacket.GetFeastRedPacketState(): | 
|---|
|  |  |  | GameWorld.DebugLog('    非节日红包活动中,不可发送!') | 
|---|
|  |  |  | return | 
|---|
|  |  |  | isFamilyRedPacket = False | 
|---|
|  |  |  | elif getType == ShareDefine.RedPackType_Server: | 
|---|
|  |  |  | isFamilyRedPacket = False | 
|---|
|  |  |  | elif getWayType == ShareDefine.RedPackWayType_Server: | 
|---|
|  |  |  | pass | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | if not curPlayer.GetFamilyID(): | 
|---|
|  |  |  | #没家族 先存起来,等进仙盟时再补发 | 
|---|
|  |  |  | 
|---|
|  |  |  | return | 
|---|
|  |  |  | isFamilyRedPacket = True | 
|---|
|  |  |  |  | 
|---|
|  |  |  | __DoCreatRedPacket(curPlayer, getType, ipyData.GetMoneyType(), ipyData.GetMoneyNum(), ipyData.GetPacketCnt(), state, wishInfo, data, isFamilyRedPacket) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | return __DoCreatRedPacket(curPlayer, getType, ipyData.GetMoneyType(), ipyData.GetMoneyNum(), ipyData.GetPacketCnt(), state, wishInfo, data, isFamilyRedPacket) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 生成红包,注意外部不可直接调用该函数 | 
|---|
|  |  |  | def __DoCreatRedPacket(curPlayer, getType, moneyType=2, awardNum=100, packetCnt=10, state=State_NoSend, wishInfo='', data=0, isFamilyRedPacket=True): | 
|---|
|  |  |  | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyRedPacketGoldLimit, goldLimit + awardNum) | 
|---|
|  |  |  | #֪ͨ | 
|---|
|  |  |  | __NotifyGoldLimt(curPlayer) | 
|---|
|  |  |  | #    else: | 
|---|
|  |  |  | #        commonCntLimit = IpyGameDataPY.GetFuncCfg('FamilyRedPacketCnt') | 
|---|
|  |  |  | #        if packetCnt < commonCntLimit: | 
|---|
|  |  |  | #            GameWorld.DebugLog('    发普通仙盟红包,数量不能少于%s!' % commonCntLimit, playerID) | 
|---|
|  |  |  | #            return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #通知Gameserver生成红包 | 
|---|
|  |  |  | msg = str([playerID, getType, packetCnt, moneyType, awardNum, wishInfo, state, data, isFamilyRedPacket]) | 
|---|
|  |  |  | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "MapServer_CreatRedPacket", msg, len(msg)) | 
|---|
|  |  |  | GameWorld.DebugLog('    通知Gameserver生成红包 msg=%s' % msg) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return True | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #// A6 08  发家族红包 #tagCMSendFamilyRedPacket | 
|---|
|  |  |  | # | 
|---|
|  |  |  | 
|---|
|  |  |  | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "SendFamilyRedPacket", msg, len(msg)) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 通知抢红包钻石额度 | 
|---|
|  |  |  | def __NotifyGoldLimt(curPlayer): | 
|---|
|  |  |  | packData = ChPyNetSendPack.tagMCFamilyRedPacketGoldLimit() | 
|---|
|  |  |  | packData.Clear() | 
|---|
|  |  |  | packData.HasSendGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0) | 
|---|
|  |  |  | packData.ServerGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt) | 
|---|
|  |  |  | packData.ServerGrabCnt = 0 | 
|---|
|  |  |  | NetPackCommon.SendFakePack(curPlayer, packData) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ## 通知抢红包次数 | 
|---|
|  |  |  | def NotifyOSRedPacket(curPlayer): | 
|---|
|  |  |  | packData = ChPyNetSendPack.tagMCOpenServerRedPacketInfo() | 
|---|
|  |  |  | packData.Clear() | 
|---|
|  |  |  | packData.MoneyNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketGrabMoney, 0) | 
|---|
|  |  |  | packData.GrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketCanGrabCnt, 0) | 
|---|
|  |  |  | startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketStartTime, 0) | 
|---|
|  |  |  | if not startTime: | 
|---|
|  |  |  | createRoleTime = curPlayer.GetCreateRoleTime() | 
|---|
|  |  |  | startTime = GameWorld.ChangeTimeStrToNum(createRoleTime) | 
|---|
|  |  |  | packData.StartTime = startTime | 
|---|
|  |  |  |  | 
|---|
|  |  |  | NetPackCommon.SendFakePack(curPlayer, packData) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #// AB 12 抢红包 #tagCMGrabFamilyRedPacket | 
|---|
|  |  |  | # | 
|---|
|  |  |  | 
|---|
|  |  |  | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) | 
|---|
|  |  |  | redPacketID = clientData.RedPaketID | 
|---|
|  |  |  | reqGetWay = clientData.GetWay | 
|---|
|  |  |  | if reqGetWay == ShareDefine.RedPackType_OpenServer: | 
|---|
|  |  |  | canGrabCnt = GetOSCanGrabCnt(curPlayer) | 
|---|
|  |  |  | elif reqGetWay == ShareDefine.RedPackType_FeastSucc: | 
|---|
|  |  |  | if reqGetWay == ShareDefine.RedPackType_FeastSucc: | 
|---|
|  |  |  | canGrabCnt = PlayerFeastRedPacket.GetFeastSuccRedPacketCanGrabCnt(curPlayer) | 
|---|
|  |  |  | elif reqGetWay == ShareDefine.RedPackType_Server: | 
|---|
|  |  |  | canGrabCnt = GetServerRedPackCanGrabCnt(curPlayer) | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | canGrabCnt = -1 | 
|---|
|  |  |  | msg = str([redPacketID, reqGetWay, canGrabCnt]) | 
|---|
|  |  |  | 
|---|
|  |  |  | GameWorld.DebugLog('    抢红包 redPacketID=%s,getWay=%s,canGrabCnt=%s' % (redPacketID, reqGetWay, canGrabCnt)) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetOSCanGrabCnt(curPlayer): | 
|---|
|  |  |  | #获取开服红包可抢次数 | 
|---|
|  |  |  | #    oscDay = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg') | 
|---|
|  |  |  | #    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) | 
|---|
|  |  |  | #    if openServerDay >= oscDay: | 
|---|
|  |  |  | #        return 0 | 
|---|
|  |  |  | #curGrabCnt = | 
|---|
|  |  |  | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketCanGrabCnt, 0) | 
|---|
|  |  |  | #    createRoleTime = curPlayer.GetCreateRoleTime() | 
|---|
|  |  |  | #    createRoleTimeNum = GameWorld.ChangeTimeStrToNum(createRoleTime) | 
|---|
|  |  |  | #    curTime = int(time.time()) | 
|---|
|  |  |  | #    rangeTime = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 3) | 
|---|
|  |  |  | #    initCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 2) | 
|---|
|  |  |  | #    return (curTime - createRoleTimeNum)/rangeTime + initCnt - curGrabCnt | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GrabOSRedPacketResult(curPlayer, moneyNum, isSelf): | 
|---|
|  |  |  | ##抢开服红包结果 | 
|---|
|  |  |  | grabNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketGrabMoney, 0) | 
|---|
|  |  |  | newGrabNum = grabNum+moneyNum | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketGrabMoney, newGrabNum) | 
|---|
|  |  |  | #广播 | 
|---|
|  |  |  | needSysOSRAllMoneyList = IpyGameDataPY.GetFuncEvalCfg('OSRAllMoneySys') | 
|---|
|  |  |  | lastIndex = -1 | 
|---|
|  |  |  | newIndex = -1 | 
|---|
|  |  |  | for i, num in enumerate(needSysOSRAllMoneyList): | 
|---|
|  |  |  | if grabNum >= num: | 
|---|
|  |  |  | lastIndex = i | 
|---|
|  |  |  | if newGrabNum >= num: | 
|---|
|  |  |  | newIndex = i | 
|---|
|  |  |  | if newIndex != -1 and newIndex > lastIndex: | 
|---|
|  |  |  | PlayerControl.WorldNotify(0, 'OpenRedBag1', [curPlayer.GetName(), newGrabNum]) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not isSelf: #抢自己的红包不扣次数 | 
|---|
|  |  |  | grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketCanGrabCnt, 0) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, max(0, grabCnt-1)) | 
|---|
|  |  |  | #        if grabCnt == IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 4): | 
|---|
|  |  |  | #            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketStartTime, int(time.time())) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #֪ͨ | 
|---|
|  |  |  | NotifyOSRedPacket(curPlayer) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GetServerRedPackCanGrabCnt(curPlayer): | 
|---|
|  |  |  | #获取全服红包可抢次数 | 
|---|
|  |  |  | # @return: -1为不限 | 
|---|
|  |  |  | vipLVMaxGrabCntDict = IpyGameDataPY.GetFuncEvalCfg("RechargeRedPacket", 3, {}) | 
|---|
|  |  |  | vipLVList = [int(vipStr) for vipStr in vipLVMaxGrabCntDict.keys()] | 
|---|
|  |  |  | vipLVList.sort() | 
|---|
|  |  |  | for vipLV in vipLVList: | 
|---|
|  |  |  | if curPlayer.GetVIPLv() <= vipLV: | 
|---|
|  |  |  | maxGrabCnt = vipLVMaxGrabCntDict[str(vipLV)] | 
|---|
|  |  |  | if not maxGrabCnt: | 
|---|
|  |  |  | return -1 | 
|---|
|  |  |  | todayGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt) | 
|---|
|  |  |  | return max(0, maxGrabCnt - todayGrabCnt) | 
|---|
|  |  |  | return 0 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def GrabServerRedPacketResult(curPlayer, moneyNum, isSelf): | 
|---|
|  |  |  | ##抢全服红包结果 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if isSelf: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ServerRedPacketGrabCnt) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, grabCnt + 1) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | __NotifyGoldLimt(curPlayer) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ProcessOSRedPacket(curPlayer, tick): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | #开服红包恢复次数 | 
|---|
|  |  |  | if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_OSRedPacket, tick): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | oscDay = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg') | 
|---|
|  |  |  | openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) | 
|---|
|  |  |  | if openServerDay >= oscDay: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketCanGrabCnt, 0) | 
|---|
|  |  |  | limitCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 4) | 
|---|
|  |  |  | if grabCnt >= limitCnt: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSRedPacketStartTime, 0) | 
|---|
|  |  |  | if not startTime: | 
|---|
|  |  |  | newCnt = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 2) | 
|---|
|  |  |  | createRoleTime = curPlayer.GetCreateRoleTime() | 
|---|
|  |  |  | curTime = GameWorld.ChangeTimeStrToNum(createRoleTime) | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | curTime = int(time.time()) | 
|---|
|  |  |  | passTime = curTime - startTime | 
|---|
|  |  |  | rangeTime = IpyGameDataPY.GetFuncCfg('OpenServerRedPacketCfg', 3) | 
|---|
|  |  |  | addCnt = passTime / rangeTime | 
|---|
|  |  |  | if addCnt <= 0:#防止测试调时间导致异常 | 
|---|
|  |  |  | return | 
|---|
|  |  |  | newCnt = min(limitCnt, grabCnt+addCnt) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketCanGrabCnt, newCnt) | 
|---|
|  |  |  | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSRedPacketStartTime, curTime) | 
|---|
|  |  |  | NotifyOSRedPacket(curPlayer) | 
|---|
|  |  |  | return | 
|---|