1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/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)