#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package GMCommon # GMÃüÁÓú¯Êý # # @author wdb # @date 2012-6-14 # @version 1.9 # # @note # @change: "2012-06-21 15:30" wdb gm¹¤¾ßÔö¼Ó¹¦ÄÜ # @change: "2012-07-12 18:00" wdb Ôö¼Ó±àÂëÊôÐÔ # @change: "2012-07-12 19:00" wdb gmÁ÷ÏòÔö¼Óʱ¼ä # @change: "2012-07-13 15:00" wdb ossͳ¼Æ·â°ü¸Äµ½eventProcessÖÐ # @change: "2012-07-18 11:50" wdb Ôö¼Óʱ¼ä³åÍ»»Ø¸´ # @change: "2012-07-30 11:30" wdb GM»Ø¸´Ï¸»¯£¬´úÂëÓÅ»¯ # @change: "2012-09-17 10:30" whx GM¹¤¾ßÐ޸ĴíÎóÌáʾ # @change: "2011-09-28 14:30" whx Ôö¼Ó´íÎóÔ­Òò # @change: "2013-01-14 10:30" wdb ͬ²½´íÎóÔ­Òò #--------------------------------------------------------------------- """Version = 2013-01-14 10:30""" #--------------------------------------------------------------------- #µ¼Èë from Common import mylog from DBCommon import CommonDefine from Collections.CollectionDefine import * from MangoDBCommon import (fix_outgoingText, fix_incomingText) from EventShell import (EventShellProxy, EventProcess) import datetime import traceback #--------------------------------------------------------------------- #È«¾Ö±äÁ¿ #--------------------------------------------------------------------- #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_DoQueryLogDB, # ²éѯlogdb Def_DoQueryUserDB, # ²éѯuserdb Def_SendToGameServer, # ·¢ËÍGameServer ) = range(Def_ResultTypeMax, Def_ResultTypeMax + 3) #ÊýÖµÉÏÏÞ(20ÒÚ) Def_UpperLimit_DWord = 2 * 1000 * 1000 * 1000 # ·Çc++¶¨ÒåµÄÕ˺Å״̬£¬pyÓõÄÕ˺ÅËø¶¨,½ûÑÔ£¬°´Î»ÅÐ¶Ï ( Def_PysForbidByPy, Def_PysForbidTalk, Def_PysForbidTalkDevice, ) = range(4, 4 + 3) 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_FamilyID = 'familyID' 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' #--------------------------------------------------------------------- ## ²éÑ¯Íæ¼Òaccid # @param db: dbGameUserÊý¾Ý # @param pack: ·â°üÊý¾Ý # @param dbLog: dbUser£¬GameLogÊý¾Ý # @param playerAccID: Íæ¼ÒÕ˺Š# @param sendPack: ÊÇ·ñ֪ͨgameserver # @return None def GetPlayerAccID(dbUser, condition): dbCollect = dbUser[UCN_DBPlayer] coll = dbCollect.find(condition) if coll.count() <= 0: # »Ø¸´£¬Î´ÕÒµ½Íæ¼Ò return '' accID = coll[0].get('AccID', '') return fix_outgoingText(accID) ## ¸ü¾ßÍæ¼ÒÕ˺ŲéÑ¯Íæ¼ÒÔÚÏß # @param dbUser: dbGameUserÊý¾Ý # @param pack: ·â°üÊý¾Ý # @param dbLog: dbUser£¬GameLogÊý¾Ý # @param playerAccID: Íæ¼ÒÕ˺Š# @param sendPack: ÊÇ·ñ֪ͨgameserver # @return None def GetPlayerOnLineByAccID(dbLog, playerAccID): logCollect = dbLog[UCN_DBPlayerInfoLog] if logCollect.find({'AccID':fix_incomingText(playerAccID), 'IsOnline':1}).count() <= 0: return False return True ##·¢ËÍʼþ¼Ç¼¸ø # @param gmType: gmÀàÐÍ # @param dataDict: Êý¾Ý # @param msg: ¸½¼ÓÐÅÏ¢ # @return None def SendEventPack(gmType, dataDict, msg=''): dataDict['GMOperate'] = gmType # gm ÃüÁî dataDict['Msg'] = msg eventTypeStr = 'GMToolOperate' EventProcess.SendEventPackByDict(eventTypeStr, dataDict) return ## ×Ö·û´®×ª»»ÎªÕûÐÍ, Èç¹û²»ÄÜת»», ·µ»ØÄ¬ÈÏÖµ # @param input ×Ö·û´® # @param defValue ĬÈÏÖµ # @return int or ĬÈÏÖµ def ToIntDef(input, defValue=0): try: result = int(input) except ValueError: return defValue return result ##»ñÈ¡Ó뵱ǰʱ¼äÏà²îÌìÊýµÄdatetime¸ñʽÊý¾Ý # @param diffDays ²î¾àÌìÊý # @return datetime ÀàÐÍÊý¾Ý # @remarks ¿Í»§¶Ë·â°üÏìÓ¦ def GetDatetimeByPlusDays(diffDays): return datetime.datetime.today() + datetime.timedelta(days = diffDays)