#!/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,
|
) = range(4, 4 + 2 )
|
|
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'
|
#---------------------------------------------------------------------
|
|
## ²éÑ¯Íæ¼Ò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)
|