| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package EventReport  | 
| #  | 
| # @todo:ʼþ»ã±¨  | 
| # @author hxp  | 
| # @date 2015-1-14  | 
| # @version 2.4  | 
| # @Note£º  EventReport_EventReportÓ÷¨ µÚÒ»¸ö²ÎÊý´«postÄÚÈÝurlencode£¬µÚ2,3,4²»Ó㻵ÚÎå¸ö²ÎÊý0´ú±íget£¬1Ϊpost£»µÚÁù¸ö²ÎÊýΪurl  | 
| #  | 
| # @change: "2015-01-28 22:30" hxp ¹Ø±Õʼþ»ã±¨  | 
| # @change: "2015-02-06 20:40" Alee Ê¼þ»ã±¨·¢ËÍÖÁºÏ·þÖ÷·þ  | 
| # @change: "2015-06-08 20:30" hxp Ôö¼ÓchannelCode  | 
| # @change: "2015-07-13 14:00" hxp Ôö¼ÓpidÐÅÏ¢  | 
| # @change: "2016-07-18 19:00" hxp 9377¶À´úʼþ»ã±¨°æ  | 
| # @change: "2016-07-27 20:00" Alee Ð޸Ĵò¿ªÎļþ³¬Ê±¹Ø±Õ  | 
| # @change: "2016-07-30 11:30" hxp ¹Ø±ÕÎïÆ·¸ú×Ù  | 
| # @change: "2016-08-18 16:30" hxp ×Ô¶¨ÒåÈÎÎñʼþ  | 
| # @change: "2016-08-30 23:00" hxp ÁÄÌì¼à¿Ø  | 
| # @change: "2016-09-10 11:00" hxp ÁÄÌìÄÚÈÝÌæ»»»»ÐÐ  | 
| # @change: "2016-11-09 20:00" hxp Ôö¼Ó×Ô¶¨Òå¼Ç¼(×øÆï¡¢³á°ò¡¢³èÎï¡¢»õ±Ò½ø³ö¡¢³È×°)  | 
| # @change: "2017-06-08 19:30" hxp Ôö¼Ó×Ô¶¨Òå¼Ç¼(µãȯ¡¢Éñ±ø¡¢·ûÓ¡¡¢¸ÄÃû¡¢ÕæÆø)  | 
| # @change: "2017-07-01 15:30" hxp Æ½Ì¨¸ÄΪ´ÓÍæ¼ÒÕ˺ÅÖÐÈ¡£¬Ö§³Ö»ì·þģʽ  | 
| # @change: "2017-07-04 15:00" hxp Ôö¼Ó»ì·þģʽÏ¿ÉÇø·Ö¸÷ƽ̨×ÔÉíÇø·þºÏ·þºóµÄƽ̨Ö÷·þID  | 
| # ÏêϸÃèÊö: Ê¼þ»ã±¨  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2017-07-04 15:00"""  | 
| #---------------------------------------------------------------------  | 
|   | 
| import IPY_GameWorld  | 
| import DataRecordPack  | 
| import PlayerControl  | 
| import ReadChConfig  | 
| import ShareDefine  | 
| import GameWorld  | 
| import ChConfig  | 
| import CommFunc  | 
| import PlayerTJG  | 
|   | 
| import datetime  | 
| import random  | 
| import time  | 
| import md5  | 
| import os  | 
| import re  | 
| import json  | 
| import urllib  | 
| EventFilepath = "D:\\EventServer\\PythonScribe\\EventLog\\"   | 
|   | 
| g_wFileName = ""  | 
| g_writeHandle = None  # ²»¿ÉÖ±½Óµ÷Óà  | 
|   | 
| Def_Custom_Events_Bug = "Bug" # ÓÎÏ·Bug  | 
| Def_Custom_Events_Suggest = "suggest" # ÓÎÏ·½¨Òé  | 
| Def_Custom_Events_Item = "Item" # ÎïÆ·¸ú×Ù  | 
| Def_Custom_Events_GetMail = "GetMail" # ÓʼþÁìÈ¡  | 
| Def_Custom_Events_CommonCard = "CommonCard_%s" # Í¨ÓÃÐÂÊÖ¿¨ÂëʹÓÃ, ²ÎÊýΪͨÓÃÂ뿨ºÅ  | 
| Def_Custom_Events_NewbieCard = "NewbieCard_%s" # ³£¹æÐÂÊÖ¿¨Ê¹ÓÃ, ²ÎÊýΪÀñ°üÀàÐÍ  | 
| Def_Custom_Events_MediaCard = "MediaCard_%s" # ÐÂýÌ忨ʹÓÃ, ²ÎÊýΪ¿¨ÀàÐÍ  | 
|   | 
| g_whStartTime = 0     # ´´½¨Îļþʱ¼ä  | 
| Def_WriteTime = 2   # Îļþ³ÖÐøÐ´Èëʱ¼ä£º·ÖÖÓ  | 
|   | 
| def OnTimeCloseScribeTxt():  | 
|     global g_whStartTime  | 
|     global g_writeHandle  | 
|     global g_wFileName  | 
|     try:  | 
|         if g_whStartTime == 0:  | 
|             return  | 
|           | 
|         #Îļþ´´½¨³¬¹ý  | 
|         if time.time() - g_whStartTime < 60*(Def_WriteTime + 1):  | 
|             return  | 
|           | 
|         if g_writeHandle == None:  | 
|             return  | 
|         g_writeHandle.close()  | 
|         g_wFileName = ""  | 
|         g_whStartTime = 0  | 
|     except:  | 
|         GameWorld.ErrLog("OnTimeCloseScribeTxt ³ö´í")  | 
|   | 
|   | 
|   | 
| ## ³õʼ»¯Ê¼þ  | 
| #  @param None  | 
| #  @return ÎÞ·µ»ØÖµ  | 
| def InitDllAppID():  | 
|   | 
|     appID = "mobile"  | 
|     key = "mobile"  | 
|   | 
|     GameWorld.GetGameWorld().EventReport_SetEventReportParam(appID, key)  | 
|     GameWorld.Log("³õʼ»¯Ê¼þ±¨¸æ: appID=%s,key=%s OK!" % (appID, key))  | 
|     return  | 
|   | 
| ## Ê¼þ±¨¸æ¼Ç¼  | 
| #  @param eventActionID Ê¼þid  | 
| #  @param eventParam Ê¼þ²ÎÊý  | 
| #  @param curPlayer   | 
| #  @return None  | 
| def EventReport(eventActionID, eventParam, curPlayer=None, OperatorID=""):  | 
|     # ×é³ÉÀý×Ó eventParam µÄ¸ñʽ±ØÐëÊÇ xx=yy&zz=cc  | 
|     #  "http://192.168.0.249:12000/event_receiver?EventID=3099&OperatorID=test&PlayerCount=102&Time=2018-02-08 18:30:30&ProductID=snxxz&RegionName=s1"  | 
|       | 
|     if not curPlayer and not OperatorID:  | 
|         return  | 
|   | 
|     ProductID = ReadChConfig.GetPyMongoConfig("EventReport", "ProductID")  | 
|     ReportUrl = ReadChConfig.GetPyMongoConfig("EventReport", "ReportUrl")  | 
|     RegionName = GameWorld.GetServerSID() # Ð迼ÂǺϷþÇé¿ö  | 
|       | 
|     playerInfo = ""  | 
|     if curPlayer:  | 
|         #UTF8 ÐèҪת³Éurl±àÂë²Å¿ÉÓà  | 
|         playerInfo = urllib.urlencode({"RoleID": curPlayer.GetName(),  | 
|                           "AccountID": GameWorld.GetPlatformAccID(curPlayer.GetAccID()),  | 
|                           "IP": curPlayer.GetIP(),  | 
|                           "Level": curPlayer.GetLV()})   | 
|           | 
|         OperatorID = GameWorld.GetPlayerPlatform(curPlayer.GetAccID())  | 
|   | 
|     if eventParam:  | 
|         eventParam = "&%s"%eventParam  | 
|       | 
|       | 
|     getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s&%s&Time=%s%s"%(\  | 
|              ReportUrl, ProductID, OperatorID, RegionName, eventActionID, playerInfo,  | 
|              str(datetime.datetime.today()).split('.')[0], eventParam)  | 
|     GameWorld.DebugLog("EventReport: %s"%getUrl)  | 
|       | 
|     # µÚÎå¸ö²ÎÊý0´ú±íget·¢ËÍ  1´ú±ípost  | 
|     GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)  | 
|     return  | 
|   | 
|   | 
| ## Ð´Ê¼þ±¨¸æÎļþ  | 
| #  @param eventClass   | 
| #  @return None  | 
| def WriteEvent(eventClass):  | 
|     return  | 
|     if GameWorld.IsMergeServer():  | 
|         return  | 
|       | 
|     if eventClass.GetScribeEventName() not in ReadChConfig.GetEvalChConfig("EventReportID"):  | 
|         return  | 
|   | 
|     if not os.path.isdir(EventFilepath):  | 
|         os.makedirs(EventFilepath)  | 
|       | 
|     #³¢ÊÔдµ½Í¬Ò»¸öÎļþµ«ÊÇwindow »áÓÐbug£¬Ö»Äܸ÷×Ô³ÌÐò·Ö¿ªÐ´Èë  | 
|     fp_w = GetWriteIO()  | 
|     fp_w.write("%s\t%s\n"%(eventClass.GetScribeEventName(), eventClass.GetCurEventStr()))  | 
|     fp_w.flush()  | 
|     return  | 
|   | 
| # ·ÖÖÓ×¼µãУ׼  | 
| def FixTime():  | 
|     curTime = datetime.datetime.today()  | 
|     curTime = curTime + datetime.timedelta(minutes=Def_WriteTime-curTime.minute%Def_WriteTime)  | 
|     tmp = str(curTime).split(".")[0][:-3].replace(':', '-')  | 
|     return tmp.replace(" ", "_")  | 
|   | 
| def GetLogFileName(fileStr):  | 
|     sessionid = md5.md5(str(random.random()) + str(time.time())).hexdigest()  | 
|     return EventFilepath + sessionid + fileStr + '.log'  | 
|   | 
| def GetWriteIO():  | 
|     global g_wFileName  | 
|     global g_writeHandle  | 
|     global g_whStartTime  | 
|       | 
|     fileTime = FixTime()  | 
|     if g_wFileName and fileTime in g_wFileName:  | 
|         #µ±Ç°ÎļþÖ±½Ó·µ»Ø  | 
|         return g_writeHandle  | 
|     curFileName = GetLogFileName(fileTime)  | 
|   | 
|     if g_writeHandle != None:  | 
|         #¹Ø±Õ¾ÉÎļþ  | 
|         g_writeHandle.close()  | 
|       | 
|     g_wFileName = curFileName  | 
|     g_writeHandle = open(g_wFileName, 'a+')  | 
|     g_whStartTime = time.time()  | 
|     return g_writeHandle  | 
|   | 
| ## =================================================================================================  | 
|   | 
| # Ã¿¸ö×ֶζ¼Ó¦¸ÃתΪ×Ö·û´®£¬²»È»join»á±¨´í  | 
|   | 
| class ScribeEvent(object):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         self.product_slug = 'yhlz'  # ÓÎÏ·±êÖ¾  | 
|         self.agent_name = ReadChConfig.GetPyMongoConfig("platform", "PlatformName") # Æ½Ì¨±êÖ¾  | 
|         self.gameserver_no = ReadChConfig.GetPyMongoConfig("platform", "ServerID")[1:] # Çø·þ  | 
|         self.time = ""    #GameWorld.GetCurrentDataTimeStr()  | 
|           | 
|     def SetEventAgentInfo(self, accIDPlatform):  | 
|         # ÉèÖôúÀíÔËÓªÉÌÐÅÏ¢  | 
|         # @param accIDPlatform: ÕâÀïÈ¡Õ˺ÅËùÊôƽ̨£¬Ö§³Ö»ì·þ, Èç¹ûÈ¡²»µ½£¬ÔòÓÃĬÈÏÅäÖõÄÔËÓªÉÌÐÅÏ¢  | 
|         if not accIDPlatform:  | 
|             return  | 
|         self.agent_name = accIDPlatform  | 
|         self.gameserver_no = str(GameWorld.GetPlayerMainServerID(self.agent_name))  | 
|         return  | 
|       | 
|     #¼´Ê¹ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|     #±ÜÃâÐ޸ĸñʽµÄÇé¿ö£¬ÕâÀïͳһÐ޸ļ´¿É  | 
|     def GetEventStr(self, tmpList):  | 
|         return '\"%s\"'%'","'.join(tmpList)  | 
|       | 
| # 3.3.1. entry£¨ÐÂÍæ¼Òµ¼È룩  | 
| class entry(ScribeEvent):  | 
|       | 
|     Def_EntryStep_CreatRole = 3  | 
|     Def_EntryStep_FirstLogin = 4  | 
|       | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(entry, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.step = 0 # ²½ÖèÖµ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.browser = "" # Íæ¼ÒʹÓõÄä¯ÀÀÆ÷  | 
|         self.resolution = "" # Íæ¼ÒµÄ×ÀÃæ·Ö±æÂÊ£¬¸ñʽΪ¡¸¿í*¸ß¡¹  | 
|         self.os = "" # Íæ¼ÒʹÓõIJÙ×÷ϵͳ  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.browser, self.resolution, self.os, str(self.step)]  | 
|           | 
|         return super(entry, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_CreateRole  | 
|       | 
| # 3.3.2. login£¨µÇ¼£©  | 
| class login(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(login, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.session_id = "" # »á»°ID  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.browser = "" # Íæ¼ÒʹÓõÄä¯ÀÀÆ÷  | 
|         self.resolution = "" # Íæ¼ÒµÄ×ÀÃæ·Ö±æÂÊ£¬¸ñʽΪ¡¸¿í*¸ß¡¹  | 
|         self.os = "" # Íæ¼ÒʹÓõIJÙ×÷ϵͳ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.browser, self.resolution, self.os, self.time, self.chr_name,   | 
|                    str(self.chr_level), self.session_id]  | 
|           | 
|         return super(login, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_Login  | 
|       | 
|       | 
| # 3.3.3. session£¨»á»°¼Ç¼£©  | 
| # Íæ¼ÒµÇ³ö¡¢ÀëÏßµÄÊý¾Ý£¬ÅäºÏµÇ¼Êý¾ÝÊý¾ÝÖÐÐÄ¿Éͳ¼Æ³öÍæ¼ÒÔÚÏßʱ³¤  | 
| class session(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(session, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.session_id = "" # »á»°ID  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.session_id]  | 
|           | 
|         return super(session, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_Session  | 
|       | 
| # 3.3.5. virtual©\cost£¨ÐéÄâ±ÒÏû·Ñ£©  | 
| # Íæ¼Ò²úÉúÏû·Ñ¼Ç¼¼´ÊÕ¼¯£»   | 
| class virtual_cost(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(virtual_cost, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.quantity = 0 # Ïû·ÑÊýÁ¿  | 
|         self.price = 0 # Ïû·ÑµãµÄÐéÄâ±Òµ¥¼Û  | 
|         self.reason_name = "" # Ïû·ÑµãÃû³Æ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|         self.balance = 0 # Íæ¼ÒÊ£ÓàÐéÄâ±Ò  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), str(self.quantity),   | 
|                    str(self.price), str(self.balance), self.reason_name]  | 
|           | 
|         return super(virtual_cost, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_VirtualCost  | 
|       | 
| # 3.3.6. virtual©\reward£¨ÐéÄâ±ÒÔùËÍ£©  | 
| # Íæ¼Ò»ñµÃÐéÄâ±ÒÔùËÍʱ¼´ÊÕ¼¯£»   | 
| # ³ýÁËÕæÊµ³äÖµ¶©µ¥²úÉúµÄÐéÄâ±ÒÔö¼Ó¶¼Ó¦¸Ã¼ÆÈëµ½ÐéÄâ±ÒÔùËÍ  | 
| class virtual_reward(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(virtual_reward, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.virtual_amount = 0 # Ôö¼ÓµÄÐéÄâ±ÒÊýÁ¿  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|         self.balance = 0 # Íæ¼ÒÊ£ÓàÐéÄâ±Ò  | 
|         self.source = "" # »ñµÃ½±ÀøµÄ;¾¶  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), str(self.virtual_amount),   | 
|                    str(self.balance), self.source]  | 
|           | 
|         return super(virtual_reward, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_VirtualReward  | 
|       | 
| # 3.3.12. virtual©\resource£¨ÐéÄâ×ÊÔ´²ú³öÓëÏûºÄ£©  | 
| # ²úÉúÏàÓ¦ÐéÄâ×ÊÔ´µÄÏû·Ñ¡¢Éú²ú¼Ç¼ʱ¼´ÊÕ¼¯¡£  | 
| # ÓÃÓÚͳ¼ÆÈκÎÐéÄâ×ÊÔ´Èç¸÷Àà¶þ¼¶»õ±ÒµÄ²ú³öÓëÏûºÄ  | 
| class virtual_resource(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(virtual_resource, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.type_name = "" # ÐéÄâ×ÊÔ´ÀàÐÍÃû³Æ  | 
|         self.reason_name = "" # ×ÊÔ´µãÃû³Æ  | 
|         self.quantity = 0 # ÐéÄâ×ÊÔ´²ú³ö/ÏûºÄµÄ´ÎÊý  | 
|         self.price = 0 # ÐéÄâ×ÊÔ´²ú³ö/ÏûºÄµÄÊýÁ¿£¬Çø·ÖÕý¸º£¬ÕýֵΪ²ú³ö£¬¸ºÖµÎªÏûºÄ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.type_name,   | 
|                    self.reason_name, str(self.quantity), str(self.price)]  | 
|           | 
|         return super(virtual_resource, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_VirtualResource  | 
|   | 
| # 3.3.9. custom©\events£¨×Ô¶¨Òåʼþ£©  | 
| # ÓÃÓÚͳ¼ÆÈÎºÎÆÚÍûÈ¥¸ú×ÙµÄÊý¾Ý  | 
| class custom_events(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(custom_events, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.event_name = "" # Ê¼þÃû³Æ  | 
|         self.session_id = "" # »á»°ID  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|         self.comments = "" # ±¸×¢»ò¸½¼ÓÐÅÏ¢ char(255)  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.event_name,  | 
|                    self.comments, self.session_id]  | 
|           | 
|         return super(custom_events, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_CustomEvents  | 
|   | 
| # 3.3.10. mission©\log£¨ÈÎÎñ¼Ç¼£©  | 
| # ¸ú×ÙÍæ¼ÒÈÎÎñ½ÓÈ¡¡¢Íê³É¡¢Ê§°ÜÇé¿ö£¬ÒÔ¼°ÓÃÓÚÁ÷Ê§Íæ¼ÒµÄÈÎÎñ·ÖÎöµÈͳ¼Æ¡£  | 
| # ÈÎÎñ½Óȡʱ¼´ÊÕ¼¯ type=0 µÄÊý¾Ý£¬ÈÎÎñ½áÊøÇҳɹ¦Ê±¼´ÊÕ¼¯ type=1¡¢mission_result=1 µÄÊý¾Ý£¬ÈÎÎñ½áÊøÇÒʧ°Üʱ¼´ÊÕ¼¯ type=1¡¢mission_result=0 µÄÊý¾Ý¡£  | 
| class missionlog(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(missionlog, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|         self.type = 0 # 0 ÈÎÎñ¿ªÊ¼ 1 ÈÎÎñ½áÊø  | 
|         self.mission_name = "" # ÈÎÎñÃû  | 
|         self.session_id = "" # »á»°ID  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.mission_result = 0 # µ±ÈÎÎñ½áÊø£¬ÈÎÎñ½á¹û 0£ºÊ§°Ü 1£º³É¹¦  | 
|         self.mission_reason = "" # µ±ÈÎÎñ½áÊøÇÒÈÎÎñʧ°ÜʱµÄÔÒò  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|           | 
|         self.scribeEventName = ShareDefine.Def_UserAction_MissionLog  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), str(self.type), self.mission_name,  | 
|                    str(self.mission_result), self.mission_reason, self.session_id]  | 
|           | 
|         return super(missionlog, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return self.scribeEventName  | 
|       | 
| # 3.3.11. level©\up£¨Éý¼¶¼Ç¼£©  | 
| # ÓÃÓÚÍæ¼ÒÉý¼¶Ê±³¤µÈµÈ¼¶Ïà¹ØÍ³¼Æ¡£  | 
| # µÈ¼¶·¢Éú±ä»¯Ê±¼´ÊÕ¼¯£»  | 
| # ÒªÍ³¼Æ 2 ¼¶µÄÉý¼¶Ê±³¤±ØÐëÒªÓР1 ¼¶µÄÉý¼¶Êý¾Ý£¬Òò´Ë¸Õ´´½¨Íê½ÇɫʱµÄ 1 ¼¶µÄÊý¾ÝÒ²ÐèÒªÊÕ¼¯¡£  | 
| class levelup(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(levelup, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|         self.session_id = "" # »á»°ID  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.session_id]  | 
|           | 
|         return super(levelup, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_LVUP  | 
|       | 
| # 3.3.13. chat-log £¨ÁÄÌìÏûÏ¢£©  | 
| # ÓÃÓÚ¼à¿ØÍæ¼ÒÁÄÌì  | 
| class chat_log(ScribeEvent):  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(chat_log, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|         self.content = "" # ÁÄÌìÄÚÈÝ  | 
|         self.cmc_name = "" # ÁÄÌìÆµµÀ±êʶ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|         self.ip = "" # IP µØÖ·  | 
|         self.account_name = "" # Õ˺ŵǼÃû  | 
|         self.account_type = 0 # Õ˺ÅÀàÐÍ  | 
|         self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶  | 
|         self.object = "" # Ë½ÁĶÔÏó  | 
|         self.addinfo = "" # ¶îÍâÐÅÏ¢  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name,   | 
|                    str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.object, self.content,  | 
|                    self.addinfo, self.cmc_name]  | 
|           | 
|         return super(chat_log, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_ChatLog  | 
|       | 
|   | 
| ## =================================================================================================  | 
|    | 
| #===============================================================================  | 
| # def WriteEvent_entry_firstlogin(curPlayer, browser, resolution, pcOS):  | 
| #    entryEvent = entry()  | 
| #    entryEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
| #    entryEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
| #    entryEvent.step = entryEvent.Def_EntryStep_FirstLogin  | 
| #    entryEvent.ip = curPlayer.GetIP()  | 
| #    entryEvent.account_name = entryEvent.account_id  | 
| #    entryEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
| #    entryEvent.browser = browser  | 
| #    entryEvent.resolution = resolution  | 
| #    entryEvent.os = pcOS  | 
| #    WriteEvent(entryEvent)  | 
| #    return  | 
| #===============================================================================  | 
|   | 
| def WriteEvent_login(curPlayer):  | 
|     if curPlayer.GetIP() == "127.0.0.1":  | 
|         return  | 
|     EventReport(ShareDefine.Def_UserAction_Login, "Job=%s&SessionID=%s"%(curPlayer.GetJob(), GameWorld.GetSessionID(curPlayer)), curPlayer)  | 
|   | 
|     return  | 
|   | 
| # ÀëÏßÊý¾Ý  | 
| def WriteEvent_session(curPlayer):  | 
|     seconds = 0  | 
|     if PlayerTJG.GetIsTJG(curPlayer):  | 
|         return  | 
|     else:  | 
|         logoffTimeStr = curPlayer.GetLogoffTime().strip()  | 
|         loginTimeStr = curPlayer.GetLoginTime().strip()  | 
|         if logoffTimeStr and loginTimeStr:  | 
|             passTimes = GameWorld.GetDateTimeByStr(logoffTimeStr) - GameWorld.GetDateTimeByStr(loginTimeStr)  | 
|             seconds = passTimes.seconds  | 
|     EventReport(ShareDefine.Def_UserAction_Session, "OnlineTime=%s&SessionID=%s"%(seconds, GameWorld.GetSessionID(curPlayer)), curPlayer)  | 
|     #===========================================================================  | 
|     # sessionEvent = session()  | 
|     # sessionEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # sessionEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # sessionEvent.session_id = GameWorld.GetSessionID(curPlayer)  | 
|     # sessionEvent.ip = curPlayer.GetIP()  | 
|     # sessionEvent.account_name = sessionEvent.account_id  | 
|     # sessionEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     # sessionEvent.chr_name = curPlayer.GetPlayerName()  | 
|     # sessionEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     # WriteEvent(sessionEvent)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
| ## Ð´ÐéÄâÔª±¦Ïû·Ñ¼Ç¼  | 
| #  @param quantity: Ïû·ÑÊýÁ¿  | 
| #  @param price: Ïû·ÑµãµÄÐéÄâ±Òµ¥¼Û  | 
| #  @param reason_name: Ïû·ÑµãÃû³Æ  | 
| def WriteEvent_virtual_cost(curPlayer, quantity, price, reason_name):  | 
|     '''  | 
|      ÎÊ£ºÐéÄâÏû·ÑµãµÄÁ£¶È¼¸´óºÃ£¿  | 
|         ´ð£ºÊý¾Ý±¨±í¶ÔÐéÄâÏû·ÑµÄͳ¼ÆÖ§³ÖÁ½¼¶£¬¼´Ïû·Ñµã¼°Æä¸¸ÀàÏû·Ñµã·Ö×飬¾Ý´Ë£º  | 
|        ¡ñ ½¨ÒéÊÇÏû·Ñ;¾¶¼ÓÉÏÏû·Ñ¶ÔÏ󣬱ÈÈ硸É̵깺Âò£ºÈýʬÄÔÉñµ¤¡¹£¬¶øºó½«¸ÃÏû·ÑµãÔÚÏû·Ñµã·Ö×éÀï¹éΪ¡¸É̵깺Âò¡¹£»  | 
|        ¡ñ ²»Òª¼ÓÉÏÏû·ÑÕßÈ硸Ҷ¹Âº®£ºÉ̵깺Âò£ºÈýʬÄÔÉñµ¤¡¹£»  | 
|        ¡ñ ²»Òª¼ÓÉÏÏû·Ñ¶ÔÏóµÈ¼¶È硸ǿ»¯£ºÁøÒ¶µ¶ [9¼¶]¡¹¡£  | 
|     '''  | 
|     #===========================================================================  | 
|     # virtualCostEvent = virtual_cost()  | 
|     # virtualCostEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # virtualCostEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # virtualCostEvent.quantity = quantity  | 
|     # virtualCostEvent.price = price  | 
|     # virtualCostEvent.balance = curPlayer.GetGold()  | 
|     # virtualCostEvent.reason_name = reason_name  | 
|     # virtualCostEvent.ip = curPlayer.GetIP()  | 
|     # virtualCostEvent.account_name = virtualCostEvent.account_id  | 
|     # virtualCostEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     # virtualCostEvent.chr_name = curPlayer.GetPlayerName()  | 
|     # virtualCostEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     # WriteEvent(virtualCostEvent)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
| ## Ð´ÐéÄâÔª±¦ÔùËÍ»ñµÃ¼Ç¼,º¬³äÖµ¿É²éµ½Õ˶һ»³ÉÐéÄâ±Òʱ¼ä  | 
| #  @param virtual_reward: Ôö¼ÓµÄÐéÄâ±ÒÊýÁ¿  | 
| #  @param source: »ñµÃ½±ÀøµÄ;¾¶  | 
| def WriteEvent_virtual_reward(curPlayer, virtual_amount, source):  | 
|     #===========================================================================  | 
|     # virtualRewardEvent = virtual_reward()  | 
|     # virtualRewardEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # virtualRewardEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # virtualRewardEvent.virtual_amount = virtual_amount  | 
|     # virtualRewardEvent.balance = curPlayer.GetGold()  | 
|     # virtualRewardEvent.source = source  | 
|     # virtualRewardEvent.ip = curPlayer.GetIP()  | 
|     # virtualRewardEvent.account_name = virtualRewardEvent.account_id  | 
|     # virtualRewardEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     # virtualRewardEvent.chr_name = curPlayer.GetPlayerName()  | 
|     # virtualRewardEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     # WriteEvent(virtualRewardEvent)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
| ## Ð´¶þ¼¶»õ±ÒµÄ²ú³öÓëÏûºÄ¼Ç¼  | 
| #  @param type_name: ÐéÄâ×ÊÔ´ÀàÐÍÃû³Æ, Èç½ð±Ò  | 
| #  @param reason_name: ×ÊÔ´µãÃû³Æ, ÈçË¢ÐÂÈÙÓþÉÌµê  | 
| #  @param quantity: ÐéÄâ×ÊÔ´²ú³ö/ÏûºÄµÄ´ÎÊý  | 
| #  @param price: ÐéÄâ×ÊÔ´²ú³ö/ÏûºÄµÄÊýÁ¿µ¥¼Û£¬Çø·ÖÕý¸º£¬ÕýֵΪ²ú³ö£¬¸ºÖµÎªÏûºÄ  | 
| #  @param flow  0 ´ú±íÏû·Ñ  1 ´ú±í²ú³ö  | 
| def WriteEvent_virtual_resource(curPlayer, type_name, reason_name, quantity, price, flow, extraDict={}):  | 
|   | 
|     #±ÜÃâ¼Ç¼̫¶àÐÅÏ¢  | 
|     if type_name in [IPY_GameWorld.TYPE_Price_Silver_Money] and abs(quantity * price) < ChConfig.Def_DRRecord_Min_Silver:  | 
|         return  | 
|     # ±êʶ´Ë»õ±ÒÊÇ·ñÊÇÒ»¼¶»õ±Ò£¨³äÖµ£©  | 
|     Recharged = 1 if type_name == IPY_GameWorld.TYPE_Price_Gold_Money else 0  | 
|     #===========================================================================  | 
|     # virtualResourceEvent = virtual_resource()  | 
|     # virtualResourceEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # virtualResourceEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # virtualResourceEvent.type_name = str(type_name)  | 
|     # virtualResourceEvent.reason_name = reason_name  | 
|     # virtualResourceEvent.quantity = quantity  | 
|     # virtualResourceEvent.price = price  | 
|     # virtualResourceEvent.ip = curPlayer.GetIP()  | 
|     # virtualResourceEvent.account_name = virtualResourceEvent.account_id  | 
|     # virtualResourceEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     # virtualResourceEvent.chr_name = curPlayer.GetPlayerName()  | 
|     # virtualResourceEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     # WriteEvent(virtualResourceEvent)  | 
|     #===========================================================================  | 
|     # OperatorExtra json ¸ñʽ Ïû·Ñ¾ßÌåÔÒò  | 
|     EventReport(ShareDefine.Def_UserAction_VirtualResource,   | 
|                 "Price=%s&Quantity=%s&OperateType=%s&CurrencyType=%s&Recharged=%s&Flow=%s&Balance=%s&OperatorExtra=%s"%(  | 
|                 price, quantity, reason_name, type_name, Recharged, flow,   | 
|                 PlayerControl.GetMoney(curPlayer, type_name), json.dumps(extraDict, ensure_ascii=False)), curPlayer)  | 
|     return  | 
|   | 
| ## Ð´ÈÎÎñʼþ¼Ç¼  | 
| #  @param startType: 0 ÈÎÎñ¿ªÊ¼ 1 ÈÎÎñ½áÊø  | 
| #  @param isFinish: µ±ÈÎÎñ½áÊø£¬ÈÎÎñ½á¹û 0£ºÊ§°Ü 1£º³É¹¦  | 
| #  @param failReason: µ±ÈÎÎñ½áÊøÇÒÈÎÎñʧ°ÜʱµÄÔÒò  | 
| def WriteEvent_mission_log(curPlayer, missionData, startType, isFinish=0, failReason=""):  | 
|     if startType not in [0, 1] or isFinish not in [0, 1]:  | 
|         return  | 
|       | 
|     if not missionData:  | 
|         return  | 
|       | 
|     #missionName = "0%s%s" % (missionData.ID, missionData.Name)  | 
|     missionName = missionData.ID  | 
|     __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason)  | 
|     return  | 
|   | 
| def WriteFuncCMEAcceptable(curPlayer, funcID):  | 
|     return  | 
|     if funcID not in ChConfig.FuncCMEDict:  | 
|         return  | 
|     WriteEvent_custom_mission_log(curPlayer, ChConfig.FuncCMEDict[funcID], ChConfig.CME_Log_Acceptable)  | 
|     return True  | 
|   | 
| def WriteEvent_MWSuccess(curPlayer, mwID, succID, logType, isFinish=0):  | 
|     '''д×Ô¶¨ÒåÈÎÎñ - ·¨±¦³É¾Íʼþ, Ê¼þID¸ñʽ:  91+·¨±¦ID+ÖÁÉÙ4λµÄ³É¾ÍID  | 
|     '''  | 
|     cmeType = "91%d%04d" % (mwID, succID)  | 
|     WriteEvent_custom_mission_log(curPlayer, cmeType, logType, isFinish)  | 
|     return  | 
|   | 
| def WriteEvent_FB(curPlayer, mapID, funcLineID, logType, joinType=0, isFinish=0, failReason=""):  | 
|     '''д×Ô¶¨ÒåÈÎÎñ - ¸±±¾Ê¼þ, Ê¼þID¸ñʽ: 90+mapID+joinType+funcLineID  | 
|     @param joinType: 0-ĬÈÏÎÞ; 1-µ¥ÈË; 2-¶àÈË; 3-ÖúÕ½;   ×¢Òâµ¥È˶ÓÎéËãµ¥ÈË  | 
|     '''  | 
|     cmeType = "90%d%d%02d" % (mapID, joinType, funcLineID)  | 
|     WriteEvent_custom_mission_log(curPlayer, cmeType, logType, isFinish, failReason=failReason)  | 
|     return  | 
|   | 
| ## Ð´×Ô¶¨ÒåÈÎÎñʼþ¼Ç¼  | 
| #  @param cmeType: ×Ô¶¨ÒåÀàÐÍ, ¶ÔÓ¦ ChConfig.CME_Type_List  | 
| #  @param logType: ¼Ç¼ÀàÐÍ, ¶ÔÓ¦ ChConfig.CME_Log_Type_List  | 
| #  @param cmeInfoEx: À©Õ¹×Ô¶¨ÒåÐÅÏ¢, Ò»°ãÓÃÓÚÐèÒª·Ö×ÓÏî¼Ç¼µÄÀàÐÍ  | 
| #  @param isFinish: µ±Ê¼þ½áÊøÊ±½á¹û 0£ºÊ§°Ü 1£º³É¹¦  | 
| #  @param failReason: µ±Ê¼þ½áÊøÊ±Ê§°ÜµÄÔÒò  | 
| def WriteEvent_custom_mission_log(curPlayer, cmeType, logType, isFinish=0, failReason="", cmeInfoEx=None):  | 
|     #if cmeType not in ChConfig.CME_Type_List:  | 
|     #    return  | 
|       | 
|     if logType not in ChConfig.CME_Log_Type_List:  | 
|         return  | 
|       | 
|     startType = 1 if logType == ChConfig.CME_Log_End else 0   | 
|     #===========================================================================  | 
|     # missionName = ChConfig.CME_Type_Dict.get(cmeType, "δ֪")  | 
|     # if cmeInfoEx != None:  | 
|     #    missionName = "%s:%s" % (missionName, cmeInfoEx)  | 
|     # if logType == ChConfig.CME_Log_Acceptable:  | 
|     #    missionName = "%s_¿ÉÌôÕ½" % missionName  | 
|     #===========================================================================  | 
|           | 
|     missionName = cmeType  | 
|     __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason, cmeType in ChConfig.CME_Ex_Log_List)  | 
|     return  | 
|   | 
| ## Ð´ÈÎÎñʼþ¼Ç¼  | 
| #  @param startType: 0 ÈÎÎñ¿ªÊ¼ 1 ÈÎÎñ½áÊø  | 
| #  @param missionName: ÈÎÎñÃû  | 
| #  @param isFinish: µ±ÈÎÎñ½áÊø£¬ÈÎÎñ½á¹û 0£ºÊ§°Ü 1£º³É¹¦  | 
| #  @param failReason: µ±ÈÎÎñ½áÊøÇÒÈÎÎñʧ°ÜʱµÄÔÒò  | 
| def __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason, isExLog=False):  | 
|     isFinish = 1 if isFinish else 0  | 
|     exDict = {"Fail":failReason}  | 
|     resultMsg = json.dumps(exDict, ensure_ascii=False)  | 
|     EventReport(ShareDefine.Def_UserAction_MissionLog,   | 
|                 "MissionStep=%s&MissionID=%s&MissionResult=%s&MissionExtra=%s"%(startType, missionName, isFinish, resultMsg), curPlayer)  | 
|     #===========================================================================  | 
|     # missionlogEvent = missionlog()  | 
|     # missionlogEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # missionlogEvent.scribeEventName = ShareDefine.Def_UserAction_ExMissionLog if isExLog else \  | 
|     #                                    ShareDefine.Def_UserAction_MissionLog  | 
|     # missionlogEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # missionlogEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     # missionlogEvent.type = startType  | 
|     # missionlogEvent.mission_name = missionName  | 
|     # missionlogEvent.session_id = GameWorld.GetSessionID(curPlayer)  | 
|     #   | 
|     # missionlogEvent.ip = curPlayer.GetIP()  | 
|     # missionlogEvent.account_name = missionlogEvent.account_id  | 
|     # missionlogEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     # missionlogEvent.chr_name = curPlayer.GetPlayerName()  | 
|     # missionlogEvent.mission_result = isFinish  | 
|     # missionlogEvent.mission_reason = failReason  | 
|     # WriteEvent(missionlogEvent)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
| def WriteEvent_level_up(curPlayer):  | 
|     EventReport(ShareDefine.Def_UserAction_LVUP, "", curPlayer)  | 
|     #===========================================================================  | 
|     # levelupEvent = levelup()  | 
|     # levelupEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # levelupEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # levelupEvent.session_id = GameWorld.GetSessionID(curPlayer)  | 
|     # levelupEvent.ip = curPlayer.GetIP()  | 
|     # levelupEvent.account_name = levelupEvent.account_id  | 
|     # levelupEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     # levelupEvent.chr_name = curPlayer.GetPlayerName()  | 
|     # levelupEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     # WriteEvent(levelupEvent)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
| def WriteEvent_chat_log(curPlayer, content, cmc_name, tagName="", addinfo=""):  | 
|     return  | 
|     '''  | 
|     @todo: Ð´ÁÄÌì¼à¿Ø¼Ç¼  | 
|     @param content: ÁÄÌìÄÚÈÝ  | 
|     @param cmc_name: ÁÄÌìÆµµÀ±êʶ  | 
|     @param tagName: Ë½ÁĶÔÏó  | 
|     @param addinfo: ¶îÍâÐÅÏ¢  | 
|     '''  | 
|     chatlogEvent = chat_log()  | 
|     chatlogEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     chatlogEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     chatlogEvent.chr_name = curPlayer.GetName()  | 
|     chatlogEvent.content = __GetEventChatContent(content)  | 
|     chatlogEvent.cmc_name = cmc_name  | 
|     chatlogEvent.ip = curPlayer.GetIP()  | 
|     chatlogEvent.account_name = chatlogEvent.account_id  | 
|     chatlogEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     chatlogEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     chatlogEvent.object = tagName  | 
|     chatlogEvent.addinfo = addinfo  | 
|     WriteEvent(chatlogEvent)  | 
|     return  | 
|   | 
| def __GetEventChatContent(content):  | 
|     '''  | 
|     <a color="255,255,0" href="GOTO 10000,74,60">[µØÍ¼:ĺ¹âÖ®³Ç(74,60)]</a>  | 
|     <A color="205,0,0" onmouseover="ShowInfo ITEM,55986" DATA="07 04 01 00 B2 DA 00 00 00 01 00 01   | 
|         28 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   | 
|         00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 3C 00 00 00 7B 27 32 38 27 3A 5B   | 
|         27 31 30 32 33 34 27 5D 2C 27 31 39 27 3A 5B 27 33 35 34 27 2C 27 38 35 36 27 2C 27 33 35   | 
|         34 27 2C 27 37 35 38 27 2C 27 39 35 31 27 2C 27 31 30 35 32 27 5D 7D 04 00 00 00 00 00 00   | 
|         00 00 00 00 00 00 00 00 00 00 ">[ÉñÊ¥µÄ°ÁÊÀÖ®¹ +40]</a>  | 
|     '''  | 
|     tempMatch = re.search("<a color=.*?>.*?</a>", content)  | 
|     if tempMatch:  | 
|         tempStr = tempMatch.group()  | 
|         markIndex = tempStr.index(">") + 1  | 
|         repStr = tempStr[markIndex:tempStr.index("<", markIndex)]  | 
|         content = content.replace(tempStr, repStr)  | 
|           | 
|     tempMatch = re.search("<A color=.*?>.*?</a>", content)  | 
|     if tempMatch:  | 
|         tempStr = tempMatch.group()  | 
|         markIndex = tempStr.index(">") + 1  | 
|         repStr = tempStr[markIndex:tempStr.index("<", markIndex)]  | 
|         content = content.replace(tempStr, repStr)  | 
|           | 
|     # Ìæ»»»»ÐÐ  | 
|     content = content.replace("\r", "")   | 
|     content = content.replace("\n", "")   | 
|     return content  | 
|   | 
| ## Ð´×Ô¶¨Òåʼþ¼Ç¼  | 
| #  @param event_name: Ê¼þÃû³Æ  | 
| #  @param comments: ±¸×¢»ò¸½¼ÓÐÅÏ¢  | 
| def WriteEvent_custom_events(curPlayer, event_name, comments):  | 
|     customEvent = custom_events()  | 
|     customEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     customEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     customEvent.event_name = event_name  | 
|     customEvent.session_id = GameWorld.GetSessionID(curPlayer)  | 
|       | 
|     customEvent.ip = curPlayer.GetIP()  | 
|     customEvent.account_name = customEvent.account_id  | 
|     customEvent.account_type = GameWorld.GetAccountType(curPlayer)  | 
|     customEvent.chr_name = curPlayer.GetPlayerName()  | 
|     customEvent.chr_level = GetScribeEvent_chr_level(curPlayer)  | 
|     customEvent.comments = CommFunc.GetStrCutoff(comments, 255)  | 
|     WriteEvent(customEvent)  | 
|     return  | 
|   | 
| #// A1 01 Íæ¼ÒµçÄÔÐÅÏ¢ #tagCMPCInfo  | 
| #  | 
| #struct tagCMPCInfo  | 
| #{  | 
| #    tagHead        Head;  | 
| #    BYTE        PCOSLen;   | 
| #    char        PCOS[PCOSLen];    // ²Ù×÷ϵͳ  | 
| #    BYTE        ResolutionLen;   | 
| #    char        Resolution[ResolutionLen];    // ·Ö±æÂÊ  | 
| #    BYTE        BrowserLen;   | 
| #    char        Browser[BrowserLen];    // ä¯ÀÀÆ÷  | 
| #    BYTE        ScribeTypeLen;   | 
| #    char        ScribeType[ScribeTypeLen];    // ¼Ç¼ÀàÐÍ  | 
| #    BYTE        ScribeDataLen;   | 
| #    char        ScribeData[ScribeDataLen];    // ¼Ç¼À©Õ¹ÐÅÏ¢  | 
| #};  | 
| def ReceiveClientPCInfo(index, clientData, tick):  | 
|     #===========================================================================  | 
|     # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     # PCOS = clientData.PCOS  | 
|     # Resolution = clientData.Resolution  | 
|     # Browser = clientData.Browser  | 
|     # ScribeType = clientData.ScribeType  | 
|     # #ScribeData = clientData.ScribeData  | 
|     #   | 
|     # GameWorld.DebugLog("ReceiveClientPCInfo %s" % ScribeType)  | 
|     # GameWorld.DebugLog("    PCOS=%s" % PCOS)  | 
|     # GameWorld.DebugLog("    Resolution=%s" % Resolution)  | 
|     # GameWorld.DebugLog("    Browser=%s" % Browser)  | 
|     #   | 
|     # # ×ª»¯Îª¶Ô·½ËùÐè¸ñʽ  | 
|     # if PCOS and "Windows" in PCOS:  | 
|     #    PCOS = " ".join(PCOS.split(" ")[:2])  | 
|     #   | 
|     # # ×ª»¯Îª¶Ô·½ËùÐè¸ñʽ  | 
|     # if Resolution:  | 
|     #    Resolution = "%s*%s" % eval(Resolution)  | 
|     #   | 
|     # if ScribeType == ShareDefine.Def_UserAction_Login:  | 
|     #    firstLogin = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FirstLogin)  | 
|     #    if not firstLogin:  | 
|     #        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)  | 
|     #        WriteEvent_entry_firstlogin(curPlayer, Browser, Resolution, PCOS)  | 
|     #        if curPlayer.GetLV() == 1:  | 
|     #            WriteEvent_level_up(curPlayer) # Ê׵Ƿ¢ËÍÒ»´Î1¼¶Êý¾Ý  | 
|     #        GameWorld.DebugLog("    entry_firstlogin")  | 
|     #          | 
|     #    WriteEvent_login(curPlayer, Browser, Resolution, PCOS)  | 
|     #===========================================================================  | 
|               | 
|     return  | 
|   | 
| #// A2 19 ÓÎÏ·½¨ÒéÊÕ¼¯ #tagCMAdviceSubmit  | 
| #  | 
| #struct    tagCMAdviceSubmit  | 
| #{  | 
| #    tagHead        Head;  | 
| #    BYTE        Type;        //Ìá½»ÀàÐÍ  | 
| #    WORD        Len;  | 
| #    char        Content[Len];    //size = Len  | 
| #};  | 
| def OnSubmitBugSuggest(index, clientData, tick):  | 
|     #===========================================================================  | 
|     # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     # subType = clientData.Type  | 
|     # content = clientData.Content  | 
|     # eventName = Def_Custom_Events_Bug if subType == 0 else Def_Custom_Events_Suggest  | 
|     # WriteEvent_custom_events(curPlayer, eventName, content)  | 
|     # DataRecordPack.DR_BugSuggest(curPlayer, eventName, content)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
| def GetScribeEvent_chr_level(curPlayer):  | 
|     transCnt, showLV = GameWorld.GetClientLV(curPlayer)  | 
|     return transCnt * 1000 + showLV  | 
|   | 
|   | 
| ## -------------------------------------- À©Õ¹×Ô¶¨Òå ---------------------------------------  | 
|   | 
| class horse_class(ScribeEvent):  | 
|     # ×øÆï½ø½×¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(horse_class, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.bef_class_lv = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄ×øÆïµÈ½×, 0´ú±í1½×  | 
|         self.bef_exp = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄ×øÆïµÈ½×ÐÇÊýµÄ¾ÑéÖµ  | 
|         self.cost_item_cnt = 0 # ´Ë´Î½ø½×ÏûºÄµÄ½ø½×µÀ¾ßÊýÁ¿  | 
|         self.aft_class_lv = 0 # ´Ë´Î½ø½×²Ù×÷ºóµÄ×øÆïµÈ½×, 0´ú±í1½×  | 
|         self.aft_exp = 0 # ´Ë´Î½ø½×²Ù×÷ºóµÄ×øÆïµÈ½×ÐÇÊýµÄ¾ÑéÖµ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    str(self.bef_class_lv), str(self.bef_exp), str(self.cost_item_cnt),  | 
|                    str(self.aft_class_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(horse_class, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_HorseClass  | 
|       | 
| def WriteEvent_horse_class(curPlayer, befClassLV, befExp, costCnt, aftClassLV, aftExp):  | 
|     ## Ð´×øÆï½ø½×¼Ç¼  | 
|     horseClass = horse_class()  | 
|     horseClass.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     horseClass.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     horseClass.chr_name = curPlayer.GetPlayerName()  | 
|     horseClass.bef_class_lv = befClassLV  | 
|     horseClass.bef_exp = befExp  | 
|     horseClass.cost_item_cnt = costCnt  | 
|     horseClass.aft_class_lv = aftClassLV  | 
|     horseClass.aft_exp = aftExp  | 
|     WriteEvent(horseClass)  | 
|     return  | 
|   | 
| class wing_class(ScribeEvent):  | 
|     # ³á°ò½ø½×¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(wing_class, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.bef_class_lv = 0 # µ±Ç°³á°òµÈ½×, 0´ú±í1½×  | 
|         self.bef_exp = 0 # ½ø½×²Ù×÷ǰµÄ×£¸£Öµ  | 
|         self.cost_item_cnt = 0 # ´Ë´Î½ø½×ÏûºÄµÄ½ø½×µÀ¾ßÊýÁ¿  | 
|         self.aft_class_lv = 0 # ´Ë´Î½ø½×²Ù×÷ºó³á°òµÄµÈ½×, 0´ú±í1½×  | 
|         self.aft_exp = 0 # ½ø½×²Ù×÷ºóµÄ×£¸£Öµ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    str(self.bef_class_lv), str(self.bef_exp), str(self.cost_item_cnt),  | 
|                    str(self.aft_class_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(wing_class, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_WingClass  | 
|       | 
| def WriteEvent_wing_class(curPlayer, befClassLV, befExp, costCnt, aftClassLV, aftExp):  | 
|     ## Ð´³á°ò½ø½×¼Ç¼  | 
|     wingClass = wing_class()  | 
|     wingClass.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     wingClass.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     wingClass.chr_name = curPlayer.GetPlayerName()  | 
|     wingClass.bef_class_lv = befClassLV  | 
|     wingClass.bef_exp = befExp  | 
|     wingClass.cost_item_cnt = costCnt  | 
|     wingClass.aft_class_lv = aftClassLV  | 
|     wingClass.aft_exp = aftExp  | 
|     WriteEvent(wingClass)  | 
|     return  | 
|   | 
| class pet_lv(ScribeEvent):  | 
|     # ³èÎïÉý¼¶¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(pet_lv, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.bef_lv = 0 # Éý¼¶Ç°µÈ¼¶, 0´ú±í1ÐÇ  | 
|         self.aft_lv = 0 # ´Ë´ÎÉý¼¶²Ù×÷ºóµÈ¼¶  | 
|         self.bef_exp = 0 ## ´Ë´Î½ø½×²Ù×÷ǰµÄ¾ÑéÖµ  | 
|         self.aft_exp = 0 ## ´Ë´Î½ø½×²Ù×÷ºóµÄ¾ÑéÖµ  | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    str(self.bef_lv), str(self.aft_lv), str(self.bef_exp), str(self.aft_exp), self.time]  | 
|           | 
|         return super(pet_lv, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_PetLV  | 
|       | 
| def WriteEvent_pet_lv(curPlayer, befLV, aftLV, befExp, aftExp):  | 
|     ## Ð´³èÎïÉý¼¶¼Ç¼  | 
|     petLV = pet_lv()  | 
|     petLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     petLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     petLV.chr_name = curPlayer.GetPlayerName()  | 
|     petLV.bef_lv = befLV  | 
|     petLV.aft_lv = aftLV  | 
|     petLV.bef_exp = befExp  | 
|     petLV.aft_exp = aftExp  | 
|     WriteEvent(petLV)  | 
|     return  | 
|   | 
| class pet_class(ScribeEvent):  | 
|     # ³èÎï½ø½×¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(pet_class, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.pet_name = "" # ³èÎïÃû³Æ  | 
|         self.bef_class_lv = 0 # ²Ù×÷ǰµÄµÈ½×, 0´ú±í1½×  | 
|         self.bef_exp = 0 # ²Ù×÷ǰµÄ×£¸£Öµ  | 
|         self.aft_class_lv = 0 # ´Ë´Î½ø½×²Ù×÷ºóµÄµÈ½×  | 
|         self.aft_exp = 0 # ½ø½×²Ù×÷ºóµÄ×£¸£Öµ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.pet_name, str(self.bef_class_lv), str(self.bef_exp),   | 
|                    str(self.aft_class_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(pet_class, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_PetClass  | 
|       | 
| def WriteEvent_pet_class(curPlayer, petName, befClassLV, befExp, aftClassLV, aftExp):  | 
|     ## Ð´³èÎï½ø½×¼Ç¼  | 
|     petLV = pet_class()  | 
|     petLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     petLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     petLV.chr_name = curPlayer.GetPlayerName()  | 
|     petLV.pet_name = petName  | 
|     petLV.bef_class_lv = befClassLV  | 
|     petLV.bef_exp = befExp  | 
|     petLV.aft_class_lv = aftClassLV  | 
|     petLV.aft_exp = aftExp  | 
|     WriteEvent(petLV)  | 
|     return  | 
|   | 
| class give_money(ScribeEvent):  | 
|     # »õ±Ò²ú³ö¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(give_money, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.source = "" # À´Ô´  | 
|         self.type_name = "" # »õ±ÒÃû³Æ  | 
|         self.addMoney = 0 # ²ú³öÊýÁ¿  | 
|         self.total_money = 0 # Ê£Óà»õ±Ò×ÜÁ¿  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.source, self.type_name, str(self.addMoney), str(self.total_money), self.time]  | 
|           | 
|         return super(give_money, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_GiveMoney  | 
|       | 
| def WriteEvent_give_money(curPlayer, source, typeName, addMoney, totalMoney):  | 
|     ## Ð´»õ±Ò²ú³ö¼Ç¼  | 
|     giveMoney = give_money()  | 
|     giveMoney.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     giveMoney.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     giveMoney.chr_name = curPlayer.GetPlayerName()  | 
|     giveMoney.source = source  | 
|     giveMoney.type_name = typeName  | 
|     giveMoney.addMoney = addMoney  | 
|     giveMoney.total_money = totalMoney  | 
|     WriteEvent(giveMoney)  | 
|     return  | 
|   | 
| class pay_money(ScribeEvent):  | 
|     # »õ±ÒÏûºÄ¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(pay_money, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.reason_name = "" # Ïû·Ñµã  | 
|         self.type_name = "" # »õ±ÒÃû³Æ  | 
|         self.costmoney = 0 # ÏûºÄÊýÁ¿  | 
|         self.total_money = 0 # Ê£Óà»õ±Ò×ÜÁ¿  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.reason_name, self.type_name, str(self.costmoney), str(self.total_money), self.time]  | 
|           | 
|         return super(pay_money, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_PayMoney  | 
|       | 
| def WriteEvent_pay_money(curPlayer, reasonName, typeName, costMoney, totalMoney):  | 
|     ## Ð´»õ±ÒÏûºÄ¼Ç¼  | 
|     payMoney = pay_money()  | 
|     payMoney.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     payMoney.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     payMoney.chr_name = curPlayer.GetPlayerName()  | 
|     payMoney.reason_name = reasonName  | 
|     payMoney.type_name = typeName  | 
|     payMoney.costmoney = costMoney  | 
|     payMoney.total_money = totalMoney  | 
|     WriteEvent(payMoney)  | 
|     return  | 
|   | 
| class equip_item(ScribeEvent):  | 
|     # Íæ¼Ò×°±¸Í³¼Æ  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(equip_item, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.equip_place = 0 # ×°±¸Î»  | 
|         self.class_lv = 0 # ×°±¸½×Êý, 0ÐÂÊÖ½×, 1-1½×  | 
|         self.item_quality = 0 # Æ·ÖÊ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    str(self.equip_place), str(self.class_lv), str(self.item_quality), self.time]  | 
|           | 
|         return super(equip_item, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_EquipItem  | 
|       | 
| def WriteEvent_orange_equip(curPlayer, place, classLV, quality):  | 
|     ## Ð´Íæ¼Ò×°±¸Í³¼Æ  | 
|     equipItem = equip_item()  | 
|     equipItem.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     equipItem.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     equipItem.chr_name = curPlayer.GetPlayerName()  | 
|     equipItem.equip_place = place  | 
|     equipItem.class_lv = classLV  | 
|     equipItem.item_quality = quality  | 
|     WriteEvent(equipItem)  | 
|     return  | 
|   | 
| class item_record(ScribeEvent):  | 
|     # ÎïÆ·Á÷Ë®¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(item_record, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.rec_type = 0 # »ñµÃ¡¢Ê§È¥  | 
|         self.event_name = "" # Ê¼þµãÃû³Æ  | 
|         self.item_name = "" # ÎïÆ·Ãû  | 
|         self.item_count = 0 # ÎïÆ·ÊýÁ¿  | 
|         self.guid = "" # ÎïÆ·Î¨Ò»ID  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    str(self.rec_type), self.event_name, self.item_name, str(self.item_count), self.guid, self.time]  | 
|           | 
|         return super(item_record, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_ItemRecord  | 
|       | 
| def WriteEvent_item_record(curPlayer, recType, operateType, itemData, operatorExtra):  | 
|     EventReport(ShareDefine.Def_UserAction_ItemRecord, "Flow=%s&OperateType=%s&ItemData=%s&OperatorExtra=%s"   | 
|                 % (recType, operateType,   | 
|                    json.dumps(itemData, ensure_ascii=False),   | 
|                    json.dumps(operatorExtra, ensure_ascii=False)), curPlayer)  | 
|     return  | 
|     #===============================================================================================  | 
|     # ''' @todo: ÎïÆ·Á÷Ë®¼Ç¼  | 
|     #    @param recType: 1-»ñµÃ£»-1-ʧȥ  | 
|     # '''  | 
|     # itemRecord = item_record()  | 
|     # itemRecord.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     # itemRecord.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     # itemRecord.chr_name = curPlayer.GetPlayerName()  | 
|     # itemRecord.rec_type = recType  | 
|     # itemRecord.event_name = eventName  | 
|     # itemRecord.item_name = itemName  | 
|     # itemRecord.item_count = itemCount  | 
|     # itemRecord.guid = guid  | 
|     # WriteEvent(itemRecord)  | 
|     # return  | 
|     #===============================================================================================  | 
|   | 
| class coin_to_gold(ScribeEvent):  | 
|     # ¶Ò»»µãȯ  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(coin_to_gold, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.order_id = "" # ¶©µ¥ID  | 
|         self.event_name = "" # Ê¼þµãÃû³Æ  | 
|         self.coin = 0 # ¶Ò»»µãȯ  | 
|         self.coin_prize = 0 # ½±Àøµãȯ  | 
|         self.gold = 0 # »ñµÃ×êʯ  | 
|         self.total_gold = 0 # µ±Ç°×Ü×êʯÊý  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.order_id, self.event_name, str(self.coin), str(self.coin_prize), str(self.gold),   | 
|                    str(self.total_gold), self.time]  | 
|           | 
|         return super(coin_to_gold, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_CoinToGold  | 
|      | 
| def WriteEvent_coin_to_gold(curPlayer, orderID, eventName, coin, prizeCoin, addGold):  | 
|     return  | 
|     coinToGold = coin_to_gold()  | 
|     coinToGold.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     coinToGold.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     coinToGold.chr_name = curPlayer.GetPlayerName()  | 
|     coinToGold.order_id = orderID  | 
|     coinToGold.event_name = eventName  | 
|     coinToGold.coin = coin  | 
|     coinToGold.coin_prize = prizeCoin  | 
|     coinToGold.gold = addGold  | 
|     coinToGold.total_gold = curPlayer.GetGold()  | 
|     WriteEvent(coinToGold)  | 
|     return  | 
|   | 
| class god_weapon_lv(ScribeEvent):  | 
|     # Éñ±øÉý¼¶¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(god_weapon_lv, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.god_weapon_name = "" # Éñ±øÃû³Æ  | 
|         self.bef_lv = 0 # ´Ë´Î²Ù×÷ǰµÄµÈ¼¶, 0´ú±í0¼¶, 1´ú±í+1¼¶  | 
|         self.bef_exp = 0 # ´Ë´Î²Ù×÷ǰµÄ¾ÑéÖµ  | 
|         self.cost_item_cnt = 0 # ´Ë´ÎÏûºÄµÄµÀ¾ßÊýÁ¿  | 
|         self.aft_lv = 0 # ´Ë´Î²Ù×÷ºóµÄµÈ¼¶, 0´ú±í0¼¶, 1´ú±í+1¼¶  | 
|         self.aft_exp = 0 # ´Ë´Î½ø½×²Ù×÷ºóµÄ¾ÑéÖµ  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.god_weapon_name, str(self.bef_lv), str(self.bef_exp), str(self.cost_item_cnt),  | 
|                    str(self.aft_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(god_weapon_lv, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_GodWeaponLV  | 
|       | 
| def WriteEvent_god_weapon_lv(curPlayer, godWeaponName, befLV, befExp, costCnt, aftLV, aftExp):  | 
|     ## Ð´Éñ±øÉý¼¶¼Ç¼  | 
|     godWeaponLV = god_weapon_lv()  | 
|     godWeaponLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     godWeaponLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     godWeaponLV.chr_name = curPlayer.GetPlayerName()  | 
|     godWeaponLV.god_weapon_name = godWeaponName  | 
|     godWeaponLV.bef_lv = befLV  | 
|     godWeaponLV.bef_exp = befExp  | 
|     godWeaponLV.cost_item_cnt = costCnt  | 
|     godWeaponLV.aft_lv = aftLV  | 
|     godWeaponLV.aft_exp = aftExp  | 
|     WriteEvent(godWeaponLV)  | 
|     return  | 
|   | 
| class rune_lv(ScribeEvent):  | 
|     # ·ûÓ¡Éý¼¶¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(rune_lv, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.rune_name = "" # ·ûÓ¡Ãû³Æ  | 
|         self.cost_rune_money = 0 # ´Ë´ÎÏûºÄµÄ·ûÓ¡¾«»ª  | 
|         self.aft_lv = 0 # ´Ë´Î²Ù×÷ºóµÄµÈ¼¶, 0´ú±í1¼¶  | 
|         self.aft_rune_money = 0 # ´Ë´Î²Ù×÷ºóµÄ·ûÓ¡¾«»ª  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.rune_name, str(self.cost_rune_money), str(self.aft_lv), str(self.aft_rune_money), self.time]  | 
|           | 
|         return super(rune_lv, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_RuneLV  | 
|       | 
| def WriteEvent_rune_lv(curPlayer, runeName, costruneMoney, aftLV, aftruneMoney):  | 
|     ## Ð´·ûÓ¡Éý¼¶¼Ç¼  | 
|     runeLV = rune_lv()  | 
|     runeLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     runeLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     runeLV.chr_name = curPlayer.GetPlayerName()  | 
|     runeLV.rune_name = runeName  | 
|     runeLV.cost_rune_money = costruneMoney  | 
|     runeLV.aft_lv = aftLV  | 
|     runeLV.aft_rune_money = aftruneMoney  | 
|     WriteEvent(runeLV)  | 
|     return  | 
|   | 
| class change_name(ScribeEvent):  | 
|     # ¸ÄÃû¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(change_name, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.old_name = "" # ÔÀ´µÄÃû×Ö  | 
|         self.new_name = "" # ÐµÄÃû×Ö  | 
|         #·Ç±ØÐë×Ö¶Î  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.old_name, self.new_name, self.time]  | 
|           | 
|         return super(change_name, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_ChangeName  | 
|       | 
| def WriteEvent_change_name(curPlayer, oldName, newName):  | 
|     ## ¸ÄÃû¼Ç¼  | 
|     changeName = change_name()  | 
|     changeName.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     changeName.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     changeName.chr_name = curPlayer.GetPlayerName()  | 
|     changeName.old_name = oldName  | 
|     changeName.new_name = newName      | 
|     WriteEvent(changeName)  | 
|     return  | 
|   | 
| class add_zhenqi(ScribeEvent):  | 
|     # ÕæÆø²ú³ö¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(add_zhenqi, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.eventName = "" # À´Ô´  | 
|         self.eventData = "" # À´Ô´¸½¼ÓÐÅÏ¢  | 
|         self.addValue = 0 # ²ú³öÊýÁ¿  | 
|         self.totalValue = 0 # Ê£Óà×ÜÁ¿  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.eventName, str(self.eventData), str(self.addValue), str(self.totalValue), self.time]  | 
|           | 
|         return super(add_zhenqi, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_AddZhenqi  | 
|       | 
| def WriteEvent_add_zhenqi(curPlayer, eventName, eventData, addValue, totalValue):  | 
|     ## ÕæÆø²ú³ö¼Ç¼  | 
|     if eventData:  | 
|         eventData = str(eventData)  | 
|         eventData = eventData.replace("\"", "'")  | 
|         eventData = eventData.replace(",", "|")  | 
|           | 
|     addZhenQi = add_zhenqi()  | 
|     addZhenQi.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     addZhenQi.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     addZhenQi.chr_name = curPlayer.GetPlayerName()  | 
|     addZhenQi.eventName = eventName  | 
|     addZhenQi.eventData = eventData  | 
|     addZhenQi.addValue = addValue  | 
|     addZhenQi.totalValue = totalValue  | 
|     WriteEvent(addZhenQi)  | 
|     return  | 
|   | 
| class lost_zhenqi(ScribeEvent):  | 
|     # ÕæÆøÏûºÄ¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(lost_zhenqi, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.eventName = "" # ÏûºÄµã  | 
|         self.eventData = "" # ÏûºÄµã¸½¼ÓÐÅÏ¢  | 
|         self.lostValue = 0 # ÏûºÄÊýÁ¿  | 
|         self.totalValue = 0 # Ê£Óà×ÜÁ¿  | 
|           | 
|         #·Ç±ØÐë×Ö¶Î  | 
|   | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.eventName, str(self.eventData), str(self.lostValue), str(self.totalValue), self.time]  | 
|           | 
|         return super(lost_zhenqi, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_LostZhenqi  | 
|       | 
| def WriteEvent_lost_zhenqi(curPlayer, eventName, eventData, lostValue, totalValue):  | 
|     ## ÕæÆøÏûºÄ¼Ç¼  | 
|     if eventData:  | 
|         eventData = str(eventData)  | 
|         eventData = eventData.replace("\"", "'")  | 
|         eventData = eventData.replace(",", "|")  | 
|           | 
|     lostZhenQi = lost_zhenqi()  | 
|     lostZhenQi.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     lostZhenQi.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     lostZhenQi.chr_name = curPlayer.GetPlayerName()  | 
|     lostZhenQi.eventName = eventName  | 
|     lostZhenQi.eventData = eventData  | 
|     lostZhenQi.lostValue = lostValue  | 
|     lostZhenQi.totalValue = totalValue  | 
|     WriteEvent(lostZhenQi)  | 
|     return  | 
|   | 
| class coat_lv(ScribeEvent):  | 
|     # Ê±×°Éý¼¶¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(coat_lv, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.coat_name = "" # Ê±×°Ãû³Æ  | 
|         self.bef_lv = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄµÈ¼¶  | 
|         self.bef_exp = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄ¾ÑéÖµ  | 
|         self.cost_item_cnt = 0 # ´Ë´ÎÏûºÄµÄµÀ¾ßÊýÁ¿  | 
|         self.aft_lv = 0 # ´Ë´Î²Ù×÷ºóµÄµÈ¼¶, 0´ú±í0¼¶, 1´ú±í+1¼¶  | 
|         self.aft_exp = 0 #´Ë´Î½ø½×²Ù×÷ºóµÄ¾ÑéÖµ  | 
|         #·Ç±ØÐë×Ö¶Î  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.coat_name, str(self.bef_lv), str(self.bef_exp), str(self.cost_item_cnt), str(self.aft_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(coat_lv, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_CoatLV  | 
|       | 
| def WriteEvent_coat_lv(curPlayer, coatName, befLV, befExp, costItemCnt, aftLV, aftExp):  | 
|     return  | 
|     ## Ð´Ê±×°Éý¼¶¼Ç¼  | 
|     coatLV = coat_lv()  | 
|     coatLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     coatLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     coatLV.chr_name = curPlayer.GetPlayerName()  | 
|     coatLV.coat_name = coatName  | 
|     coatLV.bef_lv = befLV  | 
|     coatLV.bef_exp = befExp  | 
|     coatLV.cost_item_cnt = costItemCnt  | 
|     coatLV.aft_lv = aftLV  | 
|     coatLV.aft_exp = aftExp  | 
|     WriteEvent(coatLV)  | 
|     return  | 
|   | 
|   | 
| class wingskin_lv(ScribeEvent):  | 
|     # Ê±×°Éý¼¶¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(wingskin_lv, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.skin_name = "" # »Ã»¯³á°òÃû³Æ  | 
|         self.bef_lv = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄµÈ¼¶  | 
|         self.bef_exp = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄ¾ÑéÖµ  | 
|         self.cost_item_cnt = 0 # ´Ë´ÎÏûºÄµÄµÀ¾ßÊýÁ¿  | 
|         self.aft_lv = 0 # ´Ë´Î²Ù×÷ºóµÄµÈ¼¶, 0´ú±í0¼¶, 1´ú±í+1¼¶  | 
|         self.aft_exp = 0 #´Ë´Î½ø½×²Ù×÷ºóµÄ¾ÑéÖµ  | 
|         #·Ç±ØÐë×Ö¶Î  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.skin_name, str(self.bef_lv), str(self.bef_exp), str(self.cost_item_cnt), str(self.aft_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(wingskin_lv, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_WingSkinLV  | 
|       | 
| def WriteEvent_wingskin_lv(curPlayer, skinName, befLV, befExp, costItemCnt, aftLV, aftExp):  | 
|     ## Ð´»Ã»¯³á°òÉý¼¶¼Ç¼  | 
|     wingskinLV = wingskin_lv()  | 
|     wingskinLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     wingskinLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     wingskinLV.chr_name = curPlayer.GetPlayerName()  | 
|     wingskinLV.skin_name = skinName  | 
|     wingskinLV.bef_lv = befLV  | 
|     wingskinLV.bef_exp = befExp  | 
|     wingskinLV.cost_item_cnt = costItemCnt  | 
|     wingskinLV.aft_lv = aftLV  | 
|     wingskinLV.aft_exp = aftExp  | 
|     WriteEvent(wingskinLV)  | 
|     return  | 
|   | 
|   | 
| class horseskin_lv(ScribeEvent):  | 
|     # Ê±×°Éý¼¶¼Ç¼  | 
|     def __init__(self):  | 
|         #±ØÐë×Ö¶Î  | 
|         super(horseskin_lv, self).__init__()  | 
|         self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä  | 
|         self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû  | 
|           | 
|         self.skin_name = "" # »Ã»¯×øÆïÃû³Æ  | 
|         self.bef_lv = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄµÈ¼¶  | 
|         self.bef_exp = 0 # ´Ë´Î½ø½×²Ù×÷ǰµÄ¾ÑéÖµ  | 
|         self.cost_item_cnt = 0 # ´Ë´ÎÏûºÄµÄµÀ¾ßÊýÁ¿  | 
|         self.aft_lv = 0 # ´Ë´Î²Ù×÷ºóµÄµÈ¼¶, 0´ú±í0¼¶, 1´ú±í+1¼¶  | 
|         self.aft_exp = 0 #´Ë´Î½ø½×²Ù×÷ºóµÄ¾ÑéÖµ  | 
|         #·Ç±ØÐë×Ö¶Î  | 
|           | 
|         #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"'  | 
|         return  | 
|       | 
|     def GetCurEventStr(self):  | 
|         if not self.time:  | 
|             self.time = GameWorld.GetCurrentDataTimeStr()  | 
|         tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,   | 
|                    self.skin_name, str(self.bef_lv), str(self.bef_exp), str(self.cost_item_cnt), str(self.aft_lv), str(self.aft_exp), self.time]  | 
|           | 
|         return super(horseskin_lv, self).GetEventStr(tmpList)  | 
|       | 
|     def GetScribeEventName(self): return ShareDefine.Def_UserAction_HorseSkinLV  | 
|       | 
| def WriteEvent_horseskin_lv(curPlayer, skinName, befLV, befExp, costItemCnt, aftLV, aftExp):  | 
|     ## Ð´»Ã»¯×øÆïÉý¼¶¼Ç¼  | 
|     horseSkinLV = horseskin_lv()  | 
|     horseSkinLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))  | 
|     horseSkinLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())  | 
|     horseSkinLV.chr_name = curPlayer.GetPlayerName()  | 
|     horseSkinLV.skin_name = skinName  | 
|     horseSkinLV.bef_lv = befLV  | 
|     horseSkinLV.bef_exp = befExp  | 
|     horseSkinLV.cost_item_cnt = costItemCnt  | 
|     horseSkinLV.aft_lv = aftLV  | 
|     horseSkinLV.aft_exp = aftExp  | 
|     WriteEvent(horseSkinLV)  | 
|     return  | 
| ## ---------------------------------------------------------------------------------------  | 
|   | 
|   | 
| #------------------------2018-02-09  ÐµÄÊý¾Ýͳ¼Æ--------------------------------  | 
| def WriteEvent_Entry(curPlayer, step):  | 
|     EventReport(ShareDefine.Def_UserAction_LostModel, "Step=%s&Flag=%s"%(step, ShareDefine.Def_UserAction_CreateRole), curPlayer)  | 
|       | 
| def WriteEvent_VIP(curPlayer):  | 
|     EventReport(ShareDefine.Def_UserAction_VIPLvUP, "VIPLevel=%s"%curPlayer.GetVIPLv(), curPlayer)  | 
|       | 
| def WriteEvent_FightPower(curPlayer):  | 
|     EventReport(ShareDefine.Def_UserAction_FightPower, "FightPower=%s"%curPlayer.GetFightPower(), curPlayer)  | 
|       | 
|       |