#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package GMCommon  
 | 
# GMÃüÁÓú¯Êý  
 | 
#  
 | 
# @author panwei  
 | 
# @date 2010-3-31  
 | 
# @version 1.4  
 | 
#  
 | 
# @change: "2013-03-13 17:00" wdb É¾³ý·â°ü  
 | 
# @change: "2014-09-26 12:00" hxp È¥³ýÈ«·þ¶à±¶¾Ñé½±Àø»î¶¯¿ª¹ØÌáÐÑ£¬È«²¿ÓÉÅä±íÖÐÈ¡  
 | 
# @change: "2014-12-02 11:30" hxp Ôö¼ÓÇ¿ÖÆË¢Ð»¿ØÖÆ£¬·½±ã²âÊÔ  
 | 
# @change: "2015-10-28 14:00" hxp ·µ»Ø¸ñʽʹÓÃjson  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2015-10-28 14:00"""   
 | 
#---------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
import GameWorld  
 | 
import GameWorldProcess  
 | 
import ChConfig  
 | 
import IPY_GameServer  
 | 
import ReadChConfig  
 | 
import traceback  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import GMShell  
 | 
import GameWorldActionControl  
 | 
  
 | 
import json  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö±äÁ¿  
 | 
#---------------------------------------------------------------------  
 | 
Def_MaxBroadCast = 10  # ¹ã²¥×î´ó´æ´¢ÊýÁ¿  
 | 
  
 | 
#gm¹¤¾ß·µ»Ø½á¹ûÀàÐÍ  
 | 
(  
 | 
Def_Success,   #0 ÃüÁîÖ´ÐÐ  
 | 
Def_ParamErr,   # 1²ÎÊý´íÎó  
 | 
Def_GMCmdNone,  # 2ÎÞ¸ÃGMÃüÁî  
 | 
Def_NoTag,  # 3ÎÞ·¨ÕÒµ½Ä¿±ê  
 | 
Def_PlayerOfLine, # 4Íæ¼Ò²»ÔÚÏß   
 | 
Def_Unknow,   # 5δ֪´íÎó  
 | 
Def_NoNeed,   # 6ÒÑ´¦ÓÚ¸Ã״̬  
 | 
Def_InsertFail, # 7²åÈëÊý¾Ýʧ°Ü  
 | 
Def_MaxLimit,  # 8ÊýÁ¿¹ý´ó  
 | 
Def_TimeConflict,  # 9ʱ¼ä³åÍ»  
 | 
Def_InvalidTime,  # 10ʱ¼ä²»ÕýÈ·  
 | 
Def_MakeNewCardFail, # 11Éú³ÉÐÂÊÖ¿¨³ö´í  
 | 
Def_EncodeFail, # 12±àÂëʱ³ö´í  
 | 
Def_GMDBEntranceFail,   # 13GMÃüÁîDBÈë¿Ú½âÎöÖ´Ðгö´í  
 | 
Def_GMGSEntranceFail,  # 14GMÃüÁîGameServerÈë¿Ú½âÎöÖ´Ðгö´í  
 | 
Def_DeleteIPFail,  # 15ɾ³ý½ûÑÔIPʧ°Ü  
 | 
Def_MoneyTypeErr,  # 16½ðÇ®ÀàÐÍ´íÎó  
 | 
Def_MsgMaxLenLimit,  # 17³¤¶È¹ý´ó  
 | 
Def_InvalidEvent,  # 18ÈÎÎñid²»¿ÉÓà  
 | 
Def_ChoseNothing,  # 19ûÓÐÑ¡Ôñ¿ªÆôµÄ»î¶¯  
 | 
Def_AddNumError,  # 20¼Ó³ÉÖ»ÄÜΪ´óÓÚ0µÄÕûÊý  
 | 
Def_PriceIsNull,  #21½±ÀøÐÅϢΪ¿Õ  
 | 
Def_TypeNumErr,   #22ÀàÐÍ´íÎó  
 | 
Def_NotOpenAction, #23 »î¶¯Î´¿ªÆô  
 | 
Def_ActionOpening, #24 »î¶¯¿ªÆôÖÐ  
 | 
Def_TimeIsNone, #25ûÓÐÉèÖÃʱ¼ä   
 | 
Def_TimeStarGreaterEnd, #26¿ªÊ¼Ê±¼ä´óÓÚ½áÊøÊ±¼ä  
 | 
Def_CurTimeGreaterStarTime,  #27µ±Ç°Ê±¼ä´óÓÚµÈÓÚ¿ªÊ¼Ê±¼ä  
 | 
Def_CurTimeGreaterEndTime, # 28µ±Ç°Ê±¼ä´óÓÚ½áÊøÊ±¼ä  
 | 
Def_ActionAllreadyOpen, #29 »î¶¯ÒѾÉèÖùýÁË  
 | 
Def_GMForbidMergeWar, #30 gmÉèÖÃÕâ¸ö·þ²»²Î¼Ó¿ç·þÈû  
 | 
Def_IsNotCrossServer, #31 ¸Ã·þ²»ÊÇ¿ç·þ·þÎñÆ÷  
 | 
Def_ServerAlreadyOpen, #32 ÒѾÕýʽ¿ª·þ¹ý  
 | 
Def_ServerClose, #33 ·þÎñÆ÷ά»¤ÖÐ  
 | 
Def_ServerOpen, #34 ·þÎñÆ÷Õý³£  
 | 
Def_ResultTypeMax,   
 | 
) = range(36)  
 | 
  
 | 
Def_GMKey_Type = 'pack_type'  
 | 
Def_GMKey_ResultType = 'ResultType'  
 | 
Def_GMKey_ResultMsg = 'ResultMsg'  
 | 
Def_GMKey_PlayerName = 'playerName'  
 | 
Def_GMKey_PlayerAccID = 'accID'  
 | 
Def_GMKey_FamilyName = 'familyName'  
 | 
Def_GMKey_PackIndex = 'packIndex'  
 | 
Def_GMKey_IP = 'IP'  
 | 
Def_GMKey_QueryType = 'queryType'  
 | 
Def_GMKey_BroadCastMsg = 'msg'  
 | 
  
 | 
Def_GMKey_StartTime = 'startTime'  
 | 
Def_GMKey_EndTime = 'endTime'  
 | 
Def_GMKey_StartDate = 'startDate'  
 | 
Def_GMKey_EndDate = 'endDate'  
 | 
  
 | 
Def_GMKey_Interval = 'interval'  
 | 
Def_GMKey_IsDelOthers = 'isDelOthers'  
 | 
Def_GMKey_PlayerFind = 'playerFind'  
 | 
  
 | 
Def_GMKey_FuncKey = 'funcKey'  
 | 
#---------------------------------------------------------------------  
 | 
#Â߼ʵÏÖ  
 | 
## ¹Ø±ÕÒѾ¼¤»îµÄ»î¶¯  
 | 
#  @param eventID »î¶¯ID  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def CloseProcessingEvent(eventID):  
 | 
    eventManager = GameWorld.GetGameWorldEventManager()  
 | 
    event = eventManager.FindActiveEvent(eventID)  
 | 
    if not event:  
 | 
        #Î޴˻  
 | 
        return  
 | 
      
 | 
    if not event.GetIsProcessing():  
 | 
        #δ¼¤»î,²»´¦Àí  
 | 
        return  
 | 
      
 | 
    GameWorldProcess.DoLogic_ProcessEvent_Close(eventID)  
 | 
      
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
## »ñÈ¡gm»î¶¯Ìáʾkey  
 | 
#  @param ÎÞ²ÎÊý  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GetGameServer_GM_GameID():  
 | 
    gmStarActionList = ReadChConfig.GetEvalChConfig("GmStarAction")  
 | 
    gameIdList = []  
 | 
      
 | 
    for gameIdInfo in gmStarActionList:  
 | 
        gameIdList.append(gameIdInfo[0])  
 | 
          
 | 
    return gameIdList  
 | 
  
 | 
  
 | 
## »ñÈ¡gm»î¶¯ÈÎÎñ¿ªÆôµÄÌáʾÐÅÏ¢  
 | 
#  @param missionId:ÈÎÎñID  
 | 
#  @return Ìáʾmark  
 | 
#  @remarks   
 | 
def GetGameServer_GM_GameOpen_Msg(missionId):  
 | 
    #if missionId == ChConfig.Def_GY_GM_Game_DoubleExp:  
 | 
    #    return "Activity_Entire_Two"  
 | 
      
 | 
    gmStarActionList = ReadChConfig.GetEvalChConfig("GmStarAction")  
 | 
      
 | 
    for gameIdInfo in gmStarActionList:  
 | 
        if gameIdInfo[0] != missionId:  
 | 
            continue  
 | 
      
 | 
        if gameIdInfo[1] == "-":  
 | 
            return ""  
 | 
          
 | 
        return gameIdInfo[1]  
 | 
          
 | 
    return ""  
 | 
  
 | 
  
 | 
## »ñÈ¡gm»î¶¯ÈÎÎñ¹Ø±ÕµÄÌáʾÐÅÏ¢  
 | 
#  @param missionId:ÈÎÎñID  
 | 
#  @return Ìáʾmark  
 | 
#  @remarks   
 | 
def GetGameServer_GM_GameClose_Msg(missionId):  
 | 
    #if missionId == ChConfig.Def_GY_GM_Game_DoubleExp:  
 | 
    #    return "Activity_Entire_Two01"  
 | 
          
 | 
    gmStarActionList = ReadChConfig.GetEvalChConfig("GmStarAction")  
 | 
      
 | 
    for gameIdInfo in gmStarActionList:  
 | 
        if gameIdInfo[0] != missionId:  
 | 
            continue  
 | 
      
 | 
        if gameIdInfo[2] == "-":  
 | 
            return ""  
 | 
          
 | 
        return gameIdInfo[2]  
 | 
          
 | 
    return ""  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## Ö´ÐÐGM²Ù×÷ÐÅÏ¢  
 | 
#  @param findPlayerType ²éÕÒÍæ¼ÒÀàÐÍ  
 | 
#  @param findPlayerID ²éÕÒÍæ¼ÒID  
 | 
#  @param cmdIndex Êý¾Ý¿âÖÐGMÃüÁîË÷Òý  
 | 
#  @param sendCallName µØÍ¼·þÎñÆ÷Ö´ÐеÄÇëÇóÃüÁî  
 | 
#  @param sendCMD ÇëÇóÃüÁî²ÎÊýÁÐ±í  
 | 
#  @param doResult ÊÇ·ñ֪ͨ³É¹¦  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def Send_MapServer_Query(findPlayerType , findPlayerID , cmdIndex , sendCallName, sendCMD , doResult = True):  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    #Ä¿±êÍæ¼Ò  
 | 
    tagPlayer = None  
 | 
      
 | 
    if findPlayerType == ChConfig.queryType_sqtPlayerByAccID:  
 | 
        #GameWorld.Log('ÕË»§²éѯ = %s'%(findPlayerID))  
 | 
        tagPlayer = playerManager.FindPlayerByAccID(str(findPlayerID))  
 | 
          
 | 
    elif findPlayerType == ChConfig.queryType_sqtPlayerByName:  
 | 
        #GameWorld.Log('ÐÕÃû²éѯ = %s'%(findPlayerID))  
 | 
        tagPlayer = playerManager.FindPlayerByName(str(findPlayerID))  
 | 
      
 | 
    elif findPlayerType == ChConfig.queryType_sqtPlayer:  
 | 
        tagPlayer = playerManager.FindPlayerByID(int(findPlayerID))  
 | 
      
 | 
    if not tagPlayer:  
 | 
        #·µ»ØÏûÏ¢,Ö´ÐÐʧ°Ü  
 | 
        Send_DataServer_GMCommandResult(cmdIndex, ChConfig.Def_GMTool_Fail)  
 | 
        return  
 | 
      
 | 
    tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)  
 | 
      
 | 
    if not tagMapID:  
 | 
        #GameWorld.Log('#·µ»ØÏûÏ¢,Ö´ÐÐʧ°Ü')  
 | 
        #·µ»ØÏûÏ¢,Ö´ÐÐʧ°Ü  
 | 
        Send_DataServer_GMCommandResult(cmdIndex, ChConfig.Def_GMTool_Fail)  
 | 
        return  
 | 
      
 | 
    #GameWorld.Log('#·µ»ØÏûÏ¢,Ö´Ðгɹ¦')  
 | 
    playerManager.MapServer_QueryPlayer(0, 0, tagPlayer.GetPlayerID(),   
 | 
                        tagMapID, sendCallName, '%s'%sendCMD, len(sendCMD), tagPlayer.GetRouteServerIndex())  
 | 
      
 | 
    if doResult:  
 | 
        #·µ»ØÏûÏ¢,Ö´Ðгɹ¦  
 | 
        Send_DataServer_GMCommandResult(cmdIndex, ChConfig.Def_GMTool_Succeed)  
 | 
      
 | 
    GameWorld.Log('Ö´ÐÐGMÃüÁî³É¹¦, = %s,%s'%(sendCallName, sendCMD))  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
## ±¨¸æÊý¾Ý¿âµ±Ç°GM²Ù×÷ÊÇ·ñ³É¹¦  
 | 
#  @param cmdIndex gmÃüÁîË÷Òý  
 | 
#  @param result Ö´Ðнá¹û  
 | 
#  @param strMsg ÏûÏ¢¼Ç¼  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def Send_DataServer_GMCommandResult(cmdIndex, result, strMsg = ''):  
 | 
    GameWorld.GetGameWorld().GetDBGMCommandListManager().DataServer_GMCommandResult(cmdIndex , result , strMsg)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
## ÍÑ»ú¹¤¾ßÇëÇó²éѯ·µ»Ø  
 | 
#  @param callName µ÷Óõĺ¯Êý  
 | 
#  @param cmdIndex ÃüÁîË÷Òý  
 | 
#  @param sendCMD ÃüÁî  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoLogic_sqtDataServer_GMCommand(callName , cmdIndex , sendCMD):  
 | 
    result = ChConfig.Def_GMTool_Succeed  
 | 
    strMsg = ''  
 | 
    #»ñÈ¡ÃÜÂëºÍ»ñÈ¡¾Ñé±¶ÂÊÌØÊâ´¦Àí  
 | 
    if callName in ['GetWarehousePsw', 'GetPlayerExpRate']:  
 | 
        strMsg = sendCMD  
 | 
  
 | 
    #ÉèÖÃÎïÆ·°ó¶¨,½â³ýÎïÆ·°ó¶¨£¬É¾³ýÎïÆ·  
 | 
    elif callName in ['SetItemLock' , 'SetItemUnLock' , 'SetItemDelete']:  
 | 
        strMsg = sendCMD  
 | 
  
 | 
        if strMsg != 'True':   
 | 
            result = ChConfig.Def_GMTool_Fail  
 | 
  
 | 
    Send_DataServer_GMCommandResult(cmdIndex, result, strMsg)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
## Ö´Ðзâ±ÕIPÁÐ±í¹¦ÄÜ  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoLogic_GMForbidIP(curPlayer , tick):  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    ipManager = GameWorld.GetGameWorld().GetAllDBIPManage()  
 | 
      
 | 
    for index in range(ipManager.GetCount()):  
 | 
        ipForbid = ipManager.GetAt(index)  
 | 
        if curPlayer.GetIP() != ipForbid.GetIP():  
 | 
            continue  
 | 
          
 | 
        gmOper = ipForbid.GetOper()  
 | 
        #Ö´ÐвÙ×÷  
 | 
        if gmOper == IPY_GameServer.gmForbidTalk:  
 | 
            playerManager.MapServer_QueryPlayer(0, 0, curPlayer.GetPlayerID(), curPlayer.GetRealMapID(),   
 | 
                                                'ForbidTalkByIP', '', 0, curPlayer.GetRouteServerIndex())  
 | 
          
 | 
        elif gmOper == IPY_GameServer.gmForbidAcc:  
 | 
            curPlayer.Kick(IPY_GameServer.disGMKick)  
 | 
            return  
 | 
          
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## Ö´ÐÐGM²Ù×÷ÐÅÏ¢  
 | 
#  @param findPlayerType ²éÕÒÍæ¼ÒÀàÐÍ  
 | 
#  @param findPlayerID ²éÕÒÍæ¼ÒID  
 | 
#  @param cmdIndex Êý¾Ý¿âÖÐGMÃüÁîË÷Òý  
 | 
#  @param sendCallName µØÍ¼·þÎñÆ÷Ö´ÐеÄÇëÇóÃüÁî  
 | 
#  @param sendCMD ÇëÇóÃüÁî²ÎÊýÁÐ±í  
 | 
#  @param doResult ÊÇ·ñ֪ͨ³É¹¦  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GMTool_MapServer_Query(findPlayerType, orderId, findPlayerID,  
 | 
                            gmCmdDict, sendCallName, sendCMD, doResult=True):  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    #Ä¿±êÍæ¼Ò  
 | 
    tagPlayer = None  
 | 
       
 | 
    if findPlayerType == ChConfig.queryType_sqtPlayerByAccID:  
 | 
        tagPlayer = playerManager.FindPlayerByAccID(str(findPlayerID))  
 | 
          
 | 
    elif findPlayerType == ChConfig.queryType_sqtPlayerByName:  
 | 
        tagPlayer = playerManager.FindPlayerByName(str(findPlayerID))  
 | 
      
 | 
    elif findPlayerType == ChConfig.queryType_sqtPlayer:  
 | 
        tagPlayer = playerManager.FindPlayerByID(int(findPlayerID))  
 | 
      
 | 
    if not tagPlayer:  
 | 
        #·µ»ØÏûÏ¢,Ö´ÐÐʧ°Ü  
 | 
        GMCommandResult(orderId, gmCmdDict, Def_NoTag)  
 | 
        return  
 | 
       
 | 
    tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)  
 | 
    if not tagMapID:  
 | 
        #·µ»ØÏûÏ¢,Ö´ÐÐʧ°Ü  
 | 
        GMCommandResult(orderId, gmCmdDict, Def_NoTag)  
 | 
        return  
 | 
      
 | 
    #GameWorld.Log('#·µ»ØÏûÏ¢,Ö´Ðгɹ¦')  
 | 
    cmdStr = '%s'%sendCMD  
 | 
    playerManager.MapServer_QueryPlayer(0, 0, tagPlayer.GetPlayerID(),   
 | 
                        tagMapID, sendCallName, cmdStr, len(cmdStr), tagPlayer.GetRouteServerIndex())  
 | 
      
 | 
    if doResult:  
 | 
        #·µ»ØÏûÏ¢,Ö´Ðгɹ¦  
 | 
        GMCommandResult(orderId, gmCmdDict, Def_Success)  
 | 
      
 | 
    GameWorld.Log('Ö´ÐÐGM²éѯ³É¹¦, = %s,%s'%(sendCallName, sendCMD))  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## ±¨¸æÊý¾Ý¿âµ±Ç°GM²Ù×÷ÊÇ·ñ³É¹¦  
 | 
#  @param cmdIndex gmÃüÁîË÷Òý  
 | 
#  @param result Ö´Ðнá¹û  
 | 
#  @param strMsg ÏûÏ¢¼Ç¼  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GMCommandResult(orderId, gmCmdDict, resultType, strMsg=None, userData=''):  
 | 
      
 | 
    resultDict = {  
 | 
                  Def_GMKey_ResultType:resultType,   
 | 
                  Def_GMKey_ResultMsg:strMsg,  
 | 
                  Def_GMKey_Type:gmCmdDict.get(Def_GMKey_Type, ''),  # gmÃüÁîÀàÐÍ  
 | 
                  }  
 | 
      
 | 
    resultMsg = json.dumps(resultDict, ensure_ascii=False)  
 | 
    GameWorld.Log('GMT_LOG::' + resultMsg + 'orderid:%s'%orderId)  
 | 
    GameWorld.GetGameWorld().SendToDBGMCommandResult(len(orderId), orderId, len(resultMsg),  
 | 
                                                      resultMsg, len(userData), userData)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÉèÖù㲥ÐÅÏ¢  
 | 
# @param startTime: ¿ªÊ¼Ê±¼ä  
 | 
# @param endTime: ½áÊøÊ±¼ä  
 | 
# @param interval: Ê±¼ä¼ä¸ô  
 | 
# @param msg: ¹ã²¥ÄÚÈÝ  
 | 
# @return None   
 | 
def SetBroadCastInfo(startTime, endTime, interval, msg, isDelOthers):  
 | 
      
 | 
    # ¹ã²¥ÉèÖà  
 | 
    broadCastDict = {  
 | 
                    Def_GMKey_StartTime:startTime,  
 | 
                    Def_GMKey_EndTime:endTime,  
 | 
                    Def_GMKey_Interval:interval,  
 | 
                    Def_GMKey_BroadCastMsg:msg,  
 | 
                    }      
 | 
    # Ìí¼Ó¹ã²¥  
 | 
    GMShell.g_broadCastList.append(broadCastDict)  
 | 
      
 | 
    if len(GMShell.g_broadCastList) > Def_MaxBroadCast:  
 | 
        GMShell.g_broadCastList = GMShell.g_broadCastList[-Def_MaxBroadCast:]  
 | 
      
 | 
    # È«·þ֪ͨ  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    for i in range(0, playerManager.GetPlayerCount()):  
 | 
        curPlayer = playerManager.GetPlayerByIndex(i)  
 | 
          
 | 
        if curPlayer == None or not curPlayer.GetInitOK():  
 | 
            continue  
 | 
        # Í¨Öª¿Í»§¶Ë£¬¹ã²¥ÄÚÈÝ  
 | 
        SendBroadMsg(curPlayer, startTime, endTime, interval, msg, isDelOthers)  
 | 
    return  
 | 
  
 | 
  
 | 
## ·¢ËÍËùÓй㲥¸ø¿Í»§¶Ë  
 | 
# @param curPlayer: Íæ¼Ò  
 | 
# @return None   
 | 
def SendBroadCastToClient(curPlayer):  
 | 
  
 | 
    if GMShell.g_broadCastList == []:  
 | 
        return  
 | 
      
 | 
    # ÅжÏʱ¼ä»ò»¹Ê£ÓàµÄ¹ã²¥  
 | 
    tempList = []  
 | 
  
 | 
    curTime = GameWorld.GetServerTime()  
 | 
    for msgDict in GMShell.g_broadCastList:  
 | 
          
 | 
        endTime = msgDict.get(Def_GMKey_EndTime, 0)  
 | 
        dateTime = GameWorld.ChangeTimeNumToDatetime(endTime)  
 | 
          
 | 
        if (dateTime - curTime).days < 0:  
 | 
            continue  
 | 
        # ÐèÒª´æ´¢µÄ¹ã²¥  
 | 
        tempList.append(msgDict)  
 | 
          
 | 
        startTime = msgDict.get(Def_GMKey_StartTime, 0)  
 | 
        interval = msgDict.get(Def_GMKey_Interval, 0)  
 | 
        msg = msgDict.get(Def_GMKey_BroadCastMsg, 0)  
 | 
        # Í¨Öª¿Í»§¶Ë£¬¹ã²¥ÄÚÈÝ  
 | 
        SendBroadMsg(curPlayer, startTime, endTime, interval, msg)  
 | 
          
 | 
    # ¸üй㲥ÁÐ±í  
 | 
    GMShell.g_broadCastList = tempList[:]  
 | 
    return  
 | 
          
 | 
          
 | 
## É¾³ý֮ǰµÄ´æ´¢µÄ¹ã²¥  
 | 
# @param param: None  
 | 
# @return None   
 | 
def DelAllBroadCast():  
 | 
      
 | 
    GMShell.g_broadCastList = []  
 | 
    return  
 | 
  
 | 
  
 | 
## Í¨Öª¿Í»§¶Ë£¬¹ã²¥ÄÚÈÝ  
 | 
# @param curPlayer: Íæ¼Ò  
 | 
# @param startTime: ¿ªÊ¼Ê±¼ä  
 | 
# @param endTime: ½áÊøÊ±¼ä  
 | 
# @param interval: Ê±¼ä¼ä¸ô  
 | 
# @param msg: ¹ã²¥ÄÚÈÝ  
 | 
# @param isDelOthers: ÊÇ·ñɾ³ý֮ǰµÄ¹ã²¥  
 | 
# @return None   
 | 
def SendBroadMsg(curPlayer, startTime, endTime, interval, msg, isDelOthers=False):  
 | 
  
 | 
    packData = ChPyNetSendPack.tagBroadCastInfo()  
 | 
    packData.Clear()  
 | 
    GameWorld.Log(str((startTime, endTime, interval, msg, isDelOthers)))  
 | 
    packData.IsDelOthers = isDelOthers  
 | 
    packData.StartTime = startTime  
 | 
    packData.EndTime = endTime  
 | 
    packData.Interval = interval  
 | 
    packData.Msg = msg  
 | 
    packData.MsgLen = len(msg)  
 | 
    NetPackCommon.SendFakePack(curPlayer, packData)  
 | 
    return  
 | 
      
 | 
## »î¶¯¿ØÖÆË¢Ð  
 | 
# @param curPlayer: Íæ¼Ò  
 | 
# @return None   
 | 
def ActionControlRefresh(tick):  
 | 
    worldMgr = GameWorld.GetGameWorld()  
 | 
    actionControlTickList = [ChConfig.TYPE_ActionOpenAndClose, ChConfig.TYPE_ActionOpenAndCloseByDayCount,  
 | 
                             ChConfig.TYPE_ActionNotify, ChConfig.TYPE_ActionGoOn,  
 | 
                             ChConfig.TYPE_ActionOpenAndCloseByDayCountGoOn]  
 | 
    for acKey in actionControlTickList:  
 | 
        worldMgr.SetTickByType(acKey, 0)  
 | 
          
 | 
    GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_ProcessMinute, 0)  
 | 
    #´¦ÀíÖØ¿ª·þÎñÆ÷ºó, »î¶¯¼ÌÐø¿ªÆôÂß¼¸ù¾ÝÌìÊý  
 | 
    #GameWorldActionControl.Dispose_Action_GoOn_ByDay(tick)  
 | 
    return  
 | 
  
 | 
def GMS_Answer(curPlayer, msg):  
 | 
    ''' ÌØÊâGMÃüÁî»Ø¸´¿Í»§¶ËÐÅÏ¢ '''  
 | 
    GameWorld.DebugAnswer(curPlayer, "@GMSA@%s" % msg)  
 | 
    return  
 |