#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#  
 | 
##@package  
 | 
#  
 | 
# @todo: ¸öÍÆÂß¼  
 | 
#  
 | 
# @author: Alee  
 | 
# @date 2018-5-20 ÏÂÎç02:10:00  
 | 
# @version 1.0  
 | 
#  
 | 
# @note:   
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
import PlayerControl  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import ReadChConfig  
 | 
import datetime  
 | 
import IpyGameDataPY  
 | 
import IPY_GameWorld  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import PlayerTJG  
 | 
import PlayerViewCacheTube  
 | 
import urllib  
 | 
import PlayerVip  
 | 
import json  
 | 
#===============================================================================  
 | 
# //B2 05 ÍÆËÍÌáÐÑÉèÖàtagCMPushNotificationsSetting  
 | 
#   
 | 
# struct    tagCMPushNotificationsSetting  
 | 
# {  
 | 
#    tagHead         Head;  
 | 
#    DWORD        OnoffBit;        // °´Î»Ô¼¶¨¿ª¹Ø  
 | 
#    BYTE        TimeLen;  
 | 
#    char        TimeStr[TimeLen];    // Ê±¼ä×Ö·û´®  01:02-05:00  
 | 
# };  
 | 
#===============================================================================  
 | 
  
 | 
# VIPȨÏÞ  
 | 
Def_Onoff_VIPCount = 5  
 | 
(  
 | 
Def_Onoff_Time, #Ãâ´òÈÅʱ¼ä¿ª¹Ø  
 | 
Def_Onoff_Boss, #¹Ø×¢BOSS  
 | 
Def_Onoff_Chat, #˽ÁÄ  
 | 
Def_Onoff_TJGDead,  #ÍÑ»úËÀÍö  
 | 
Def_Onoff_TJGTimeLess,  #ÍÑ»úʱ¼ä²»×ã1Сʱ  
 | 
) = range(Def_Onoff_VIPCount)  
 | 
  
 | 
#·ÇVIPȨÏÞ  
 | 
Def_GeTui_FMT = -2 # ·âħ̳  
 | 
  
 | 
  
 | 
# ÍÆËÍÌáÐÑÉèÖà  
 | 
def GeTuiSetting(index, pack, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    if not PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_5):  
 | 
        #Çå¿Õǰ4λ VIPȨÏÞ  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GeTuiSet, pack.OnoffBit>>Def_Onoff_VIPCount<<Def_Onoff_VIPCount)  
 | 
        return  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GeTuiSet, pack.OnoffBit)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_NoGeTuiTime, GetTimeLimit(pack.TimeStr))  
 | 
      
 | 
    # ¿Í»§¶ËÐè¿ØÖÆÏ·¢ËÍÆµÂÊ  
 | 
    PlayerViewCacheTube.UpdateGameServerPlayerCache(curPlayer, tick, False)  
 | 
    return  
 | 
  
 | 
  
 | 
def GetTimeLimit(timeStr):  
 | 
    # ¼ì²é¸ñʽºóתÊý×Ö  
 | 
    timeList = timeStr.split("-")  
 | 
    if len(timeList) != 2:  
 | 
        return  
 | 
      
 | 
    numList = timeList[0].split(":")  
 | 
    if len(numList) != 2:  
 | 
        return   
 | 
      
 | 
    num1 = GameWorld.ToIntDef(numList[0], 0)  
 | 
    num2 = GameWorld.ToIntDef(numList[1], 0)  
 | 
      
 | 
    if num1 < 0 or num1 > 24:  
 | 
        return   
 | 
    if num2 < 0 or num2 > 60:  
 | 
        return   
 | 
      
 | 
    numList2 = timeList[1].split(":")  
 | 
    if len(numList2) != 2:  
 | 
        return   
 | 
      
 | 
    num3 = GameWorld.ToIntDef(numList2[0], 0)  
 | 
    num4 = GameWorld.ToIntDef(numList2[1], 0)  
 | 
      
 | 
    if num3 < 0 or num3 > 24:  
 | 
        return   
 | 
    if num4 < 0 or num4 > 60:  
 | 
        return   
 | 
      
 | 
    return num1*1000000 + num2*10000 + num3*100 + num4  
 | 
  
 | 
# ±ãÓÚ²âÊÔ  
 | 
def GetGeTuiClientID(curPlayer):  
 | 
    #return "13165ffa4e5a8fbf6d0"  
 | 
    return curPlayer.GetAccountData().GetGeTuiClientID()  
 | 
  
 | 
# ¼ì²éÊÇ·ñ¿ÉÒÔ¸öÍÆ£¬geTuiTypeСÓÚ0µÄ´ú±íĬÈÏ¿ÉÍÆ£¬ÎÞVIPÏÞÖÆ  
 | 
def CheckCanGeTui(curPlayer, geTuiType=-1):  
 | 
    if not GetGeTuiClientID(curPlayer):  
 | 
        return False  
 | 
      
 | 
    if not PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_5):  
 | 
        if geTuiType < 0:  
 | 
            return True  
 | 
        return False  
 | 
      
 | 
    if geTuiType == Def_GeTui_FMT:  
 | 
        # ·âħ̳ÊÜVIPµÄ¹Ø×¢BOSS¿ª¹ØÓ°Ïì  
 | 
        geTuiType = Def_Onoff_Boss  
 | 
      
 | 
    # ¼ì²éʱ¼äºÍ¿ª¹Ø  
 | 
    if geTuiType >= 0 and curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GeTuiSet)&pow(2, geTuiType) == 0:  
 | 
        return False  
 | 
      
 | 
    # Ã»ÓпªÆôÃâ´òÈÅ  
 | 
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GeTuiSet)&pow(2, Def_Onoff_Time) == 0:  
 | 
        return True  
 | 
      
 | 
    limitTimt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_NoGeTuiTime)  
 | 
      
 | 
    curTime = GameWorld.GetCurrentTime()  
 | 
    dateStr = str(curTime).split()[0]  
 | 
    #ʱ¼ä¸ñʽ '%Y-%m-%d %H:%M'  
 | 
    try:  
 | 
        startTimeStr = '%s %s:%s'%(dateStr, limitTimt/1000000, limitTimt/10000%100)  
 | 
        startTime = datetime.datetime.strptime(startTimeStr, "%Y-%m-%d %H:%M")  
 | 
          
 | 
        endTimeStr = '%s %s:%s'%(dateStr, limitTimt/100%100, limitTimt%100)  
 | 
        endTime = datetime.datetime.strptime(endTimeStr, "%Y-%m-%d %H:%M")  
 | 
    except:  
 | 
        return False  
 | 
      
 | 
    if startTime == endTime:  
 | 
        # Ê±¼äÒ»Ö´ú±í²»ÏÞÖÆ  
 | 
        return True  
 | 
      
 | 
    # Èç 13:00-23:00  
 | 
    elif startTime < endTime:  
 | 
        if startTime <= curTime and curTime <= endTime:  
 | 
            return False  
 | 
      
 | 
    # Èç 23:00 - 8:00  
 | 
    else:  
 | 
        if endTime < curTime < startTime:  
 | 
            return True  
 | 
        else:  
 | 
            return False  
 | 
      
 | 
    return True  
 | 
  
 | 
#===============================================================================  
 | 
# //B2 02 ÍÆËÍÌáÐÑÉèÖÃ֪ͨ #tagMCPushNotificationsSetting  
 | 
#   
 | 
# struct    tagMCPushNotificationsSetting  
 | 
# {  
 | 
#    tagHead         Head;  
 | 
#    DWORD        OnoffBit;        // °´Î»Ô¼¶¨¿ª¹Ø  
 | 
#    BYTE        TimeLen;  
 | 
#    char        TimeStr[TimeLen];    // Ê±¼ä×Ö·û´®  01:02-05:00  
 | 
# };  
 | 
#===============================================================================  
 | 
def LoginNotifySetting(curPlayer):  
 | 
  
 | 
    sendPack = ChPyNetSendPack.tagMCPushNotificationsSetting()  
 | 
    sendPack.OnoffBit = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GeTuiSet)  
 | 
      
 | 
    limitTimt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_NoGeTuiTime)  
 | 
    timeStr = "%s:%s-%s:%s"%(limitTimt/1000000, limitTimt/10000%100, limitTimt/100%100, limitTimt%100)  
 | 
    sendPack.TimeStr = timeStr  
 | 
    sendPack.TimeLen = len(timeStr)  
 | 
    NetPackCommon.SendFakePack(curPlayer, sendPack)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# import urllib  
 | 
# getUrl = "http://127.0.0.1:53000/getui/index.php"  
 | 
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(0)  
 | 
# postInfo = urllib.urlencode({"PlayerName": curPlayer.GetName(), "NotifyMsg":"BOSS---", "RegID":"101d8559091575fb3da", "OSName":"ios"})  
 | 
# GameWorld.GetGameWorld().EventReport_EventReport(postInfo, "", "", "", 1, getUrl)  
 | 
#===============================================================================  
 | 
  
 | 
  
 | 
# ÈºÍÆÀඨʱ»î¶¯Óɿͻ§¶Ë×Ô¼º´¦Àí  
 | 
# ·þÎñ¶ËÈºÍÆÔݲ»ÓÉÓÎÏ··þÎñÆ÷ÍÆËÍ£¬¿É´ÓµÚÈý·½¸öÍÆÍøÕ¾ÍÆËÍ  
 | 
# ÓÎÏ··þÎñÆ÷Ö»ÍÆË;ßÓб仯ÐÔµÄÄÚÈÝ  
 | 
# Ö§³Öµ¥ÍƺͶàÈËÍÆËÍ  
 | 
# appIDDict »ì·þʹÓöÔÓ¦²»Í¬key {ƽ̨ID£º[[Íæ¼Ò¸öÍÆID£¬ Íæ¼ÒÃû],[Íæ¼Ò¸öÍÆID2£¬ Íæ¼ÒÃû2]¡£¡£¡£]}  
 | 
# Èç¹ûÍæ¼ÒÃû´æÔÚÔò±ØÐëÓë¸öÍÆIDÒ»Ò»¶ÔÓ¦£¬Èô²»´æÔÚÔòÊǶàÍÆ£¬Èô´æÔÚÔò»áÒ»Ò»µ¥ÍÆ  
 | 
#                ´øÃû×ֻᱻ×éºÏ³É ¸ñʽÈç¡¾Íæ¼ÒÃû¡¿Äú¹Ø×¢µÄBOSSxxÒѸ´»î  
 | 
# EventReport_EventReport ÏòÓÎÏ··þÎñÆ÷µÄ¸öÍÆÐ¡³ÌÐò·¢ËÍ webbottle  
 | 
def GeTuiNotify(appIDDict, notifyMsg):  
 | 
    if not appIDDict:  
 | 
        return  
 | 
    #osName = ReadChConfig.GetPyMongoConfig("GeTui", "OSName") »ì·þÎÞ·¨ÅäÖÃϵͳ  
 | 
    geTuiUrl = ReadChConfig.GetPyMongoConfig("GeTui", "GeTuiUrl")  
 | 
      
 | 
    playerInfo = json.dumps(appIDDict, ensure_ascii=False)  
 | 
    #º¬ÖÐÎIJ¿·ÖÒªurlencode  
 | 
    postInfo = urllib.urlencode({"PlayerInfo": playerInfo, "NotifyMsg":notifyMsg})  
 | 
      
 | 
    GameWorld.GetGameWorld().EventReport_EventReport(postInfo, "", "", "", 1, geTuiUrl)  
 | 
    return  
 | 
  
 | 
  
 | 
# Ê±¼ä²»×ã  
 | 
def TJGTimeLess(curPlayer):  
 | 
    # Í¨ÖªÍÑ»ú¹Ò£¬Ö»´¦ÀíÒ»´Î  
 | 
    if curPlayer.GetDictByKey("TJGTimeLess"):  
 | 
        return  
 | 
      
 | 
    tjgTime = PlayerTJG.GetTJGTime(curPlayer)  
 | 
    if tjgTime > 3600:  
 | 
        return  
 | 
      
 | 
    curPlayer.SetDict("TJGTimeLess", 1)  
 | 
      
 | 
    if not CheckCanGeTui(curPlayer, Def_Onoff_TJGTimeLess):  
 | 
        return  
 | 
      
 | 
    showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiTJG", 4))    # ÎÄ×ÖÐÅÏ¢  
 | 
    GeTuiNotify({GameWorld.GetPlayerPlatform(curPlayer.GetAccID()) :[[GetGeTuiClientID(curPlayer), curPlayer.GetName()]]}, showStr)  
 | 
    return  
 | 
  
 | 
  
 | 
#[Íæ¼ÒÃû]ÍÑ»úÍâ¹ÒÒÑ¿ªÊ¼ÍйܽÇÉ«¹Ò»ú£¬½ÇÉ«µ±Ç°¾ÑéЧÂÊ£º9999ÒÚ9999Íò¾Ñé/·Ö£¬Ê£ÓàÍÑ»úÍâ¹Òʱ¼ä£º**Сʱ**·ÖÖÓ  
 | 
def TJGEfficiency(curPlayer, times, exp):  
 | 
    # Í¨ÖªÍÑ»ú¹ÒÐ§Òæ£¬Ö»´¦ÀíÒ»´Î  
 | 
    if curPlayer.GetDictByKey("TJGEfficiency"):  
 | 
        return  
 | 
    curPlayer.SetDict("TJGEfficiency", 1)  
 | 
      
 | 
    if not CheckCanGeTui(curPlayer):  
 | 
        return  
 | 
      
 | 
    showStr = IpyGameDataPY.GetFuncCfg("GeTuiTJG")    # ÎÄ×ÖÐÅÏ¢  
 | 
    wanStr = IpyGameDataPY.GetFuncCfg("Coins1", 1) # Íò  
 | 
    yiStr = IpyGameDataPY.GetFuncCfg("Coins1", 2) # ÒÚ  
 | 
      
 | 
    # ´ËΪÖÐʽÏÔʾ·¨£¬·Òë³ÉÓ¢ÎÄÒò¿¼ÂÇÏÔʾÂß¼²»Í¬¶ø±ä  
 | 
    Hundred_Million = 100000000  
 | 
    Ten_Thousand = 10000  
 | 
      
 | 
    exp = exp/max(times, 1)*60  
 | 
      
 | 
    if exp >= Hundred_Million:  
 | 
        expStr = "%s%s"%(exp/Hundred_Million, yiStr)  
 | 
        if exp/Ten_Thousand%Ten_Thousand != 0:  
 | 
            expStr += "%s%s"%(exp/Ten_Thousand%Ten_Thousand, wanStr)  
 | 
    elif exp >= Ten_Thousand:  
 | 
        if exp < Ten_Thousand*100:  
 | 
            expStr = "%.1f%s"%(exp*1.0/Ten_Thousand, wanStr)  
 | 
        else:  
 | 
            expStr = "%s%s"%(exp/Ten_Thousand, wanStr)  
 | 
    else:  
 | 
        expStr = exp  
 | 
      
 | 
    tjgTime = PlayerTJG.GetTJGTime(curPlayer)  
 | 
      
 | 
    GeTuiNotify({GameWorld.GetPlayerPlatform(curPlayer.GetAccID()) : [[GetGeTuiClientID(curPlayer), curPlayer.GetName()]]},   
 | 
                GameWorld.GbkToCode(showStr%(expStr, tjgTime/60/60, tjgTime/60%60)))  
 | 
    return  
 | 
  
 | 
#Äú±»[ÆäËûÍæ¼ÒÃû]ɱËÀ£¬Ê£ÓàÍÑ»úÍâ¹Òʱ¼ä£º**Сʱ**·ÖÖÓ  
 | 
def TJGDead(curPlayer, tagName):  
 | 
    if curPlayer.GetGameObjType() != IPY_GameWorld.gotPlayer:  
 | 
        return  
 | 
    if not PlayerTJG.GetIsTJG(curPlayer):  
 | 
        return  
 | 
      
 | 
    if not CheckCanGeTui(curPlayer):  
 | 
        return  
 | 
      
 | 
    showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiTJG", 2))    # ÎÄ×ÖÐÅÏ¢  
 | 
    tjgTime = PlayerTJG.GetTJGTime(curPlayer)  
 | 
      
 | 
    GeTuiNotify({GameWorld.GetPlayerPlatform(curPlayer.GetAccID()) : [[GetGeTuiClientID(curPlayer), curPlayer.GetName()]]},   
 | 
                showStr%(tagName, tjgTime/60/60, tjgTime/60%60))  
 | 
    return  
 | 
  
 | 
# [Íæ¼ÒÃû]µ±Ç°±³°üÒÑÂú£¬¸Ï¿ìÉÏÏß²éÊÕÕ½ÀûÆ·°É  
 | 
def FullPack(curPlayer):  
 | 
    # ±³°üÂúÖ»´¦ÀíÒ»´Î,Íâ²ãÒÑÀ¹½Ø  
 | 
    #===========================================================================  
 | 
    # if curPlayer.GetDictByKey("GTFullPack"):  
 | 
    #    return  
 | 
    # curPlayer.SetDict("GTFullPack", 1)  
 | 
    #===========================================================================  
 | 
      
 | 
    if not CheckCanGeTui(curPlayer):  
 | 
        return  
 | 
      
 | 
    showStr = GameWorld.GbkToCode(IpyGameDataPY.GetFuncCfg("GeTuiTJG", 3))    # ÎÄ×ÖÐÅÏ¢  
 | 
    GeTuiNotify({GameWorld.GetPlayerPlatform(curPlayer.GetAccID()) : [[GetGeTuiClientID(curPlayer), curPlayer.GetName()]]}, showStr)  
 | 
      
 | 
      
 | 
      
 | 
     
 |