ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyRedPacket.py
@@ -25,7 +25,6 @@
import ShareDefine
import CommFunc
import time
#---------------------------------------------------------------------
(
@@ -39,7 +38,6 @@
## 玩家登录
def OnPlayerLogin(curPlayer):
    __NotifyGoldLimt(curPlayer)
    NotifyOSRedPacket(curPlayer)
    return
## OnDay处理
@@ -48,18 +46,22 @@
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):
    ## 玩家充值
@@ -110,20 +112,14 @@
    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():
            #没家族 先存起来,等进仙盟时再补发
@@ -131,8 +127,7 @@
            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):
@@ -160,18 +155,12 @@
        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
#
@@ -204,32 +193,14 @@
        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
#
@@ -243,12 +214,8 @@
    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])
@@ -256,104 +223,6 @@
    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