| #!/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  |