| | |
| | | import ShareDefine
|
| | | import CommFunc
|
| | |
|
| | | import time
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | (
|
| | |
| | | ## 玩家登录
|
| | | def OnPlayerLogin(curPlayer):
|
| | | __NotifyGoldLimt(curPlayer)
|
| | | NotifyOSRedPacket(curPlayer)
|
| | | return
|
| | |
|
| | | ## OnDay处理
|
| | |
| | | def RedPacketOnDay(curPlayer, onEventType):
|
| | | if onEventType == ShareDefine.Def_OnEventType:
|
| | | #发钻石红包额度重置
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ServerRedPacketGrabCnt, 0)
|
| | | __NotifyGoldLimt(curPlayer)
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyRedPacketGoldLimit):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyRedPacketGoldLimit, 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:
|
| | | isFamilyRedPacket = False
|
| | | 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 |