| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package DataRecordPack  | 
| #  | 
| # @todo: ¶¨Òåʼþ¼Ç¼º¯Êý£¬·¢Ë͸øEventShell.exeµÄ·â°ü.ÓÃÓÚ0SSͳ¼ÆµÈ  | 
| # @author Alee  | 
| # @date 2012-03-03 20:30  | 
| # @version 4.2  | 
| #  | 
| # ÏêϸÃèÊö: º¯ÊýÃüÃû¹æÔòÒÔDR_¿ªÍ·. Êý¾Ý¼Ç¼DR = data record  | 
| # ¾¯¸æ£ºÕâÀïÌáµ½µÄEventShell, ²»ÊÇÖ¸ÈÎÎñʼþ£¬Ö»ÊÇͬÃû¶øÒÑ  | 
| #  | 
| # ²¿·Ö×ÖµäkeyµÄÃüÃûͳһ, ±ãÓÚ¹¤¾ß½âÎöʹÓà  | 
| # PlayerID:Íæ¼ÒID  | 
| # PlayerName:Íæ¼ÒÐÕÃû  | 
| # AccID:Õ˺ÅID  | 
| # PlayerLV:Íæ¼ÒµÈ¼¶  | 
| # VIPLv:vipµÈ¼¶  | 
| # PlayerExp:Íæ¼Òµ±Ç°¾Ñé  | 
| # LVRequireExp  | 
|   | 
| # MoneyType:½ðÇ®ÀàÐÍ  | 
| # MoneyCount:½ðÇ®ÊýÁ¿  | 
| # TotalMoney:×ܽðÇ®ÊýÁ¿  | 
| # WarehouseMoneyCount:²Ö¿â½ðÇ®ÊýÁ¿  | 
| # PlayerMoneyCount:Íæ¼ÒÉíÉϽðÇ®ÊýÁ¿  | 
| # MemberFamilyLV:Íæ¼ÒÔÚ¼Ò×åÖеÄְλ  | 
|   | 
| # MissionID:ÈÎÎñID  | 
|   | 
| # PetID:³èÎïID  | 
| # NPCID:npcµÄID  | 
| # NPCName:npcÃû×Ö  | 
|   | 
| # PackType:±³°üÀàÐÍ  | 
| # SrcPackType: Æðʼ±³°üÀàÐÍ  | 
| # DescPackType: Ä¿±ê±³°üÀàÐÍ  | 
| # ItemKind:ÎïÆ·ÖÖÀà  | 
| # ItemID:ÎïÆ·ID  | 
| # ItemCount:ÎïÆ·ÊýÁ¿  | 
| # IsBind:ÊÇ·ñ°ó¶¨  | 
| # ItemGUID:ÎïÆ·µÄGUID  | 
| # IsPutIn:ÊÇ·ñ¸øÓè³É¹¦  | 
| # MapID:µØÍ¼ID  | 
|   | 
| # IP:ipµØÖ·  | 
|   | 
| # FamilyID:¼Ò×åID  | 
| # FamilyLV:¼Ò×åµÈ¼¶  | 
| # FamilyName:¼Ò×åÃû×Ö  | 
|   | 
| #EquipUpStarLV:×°±¸Ç¿»¯  | 
| #EquipMagic:×°±¸ÁéÎÆ  | 
| #SearchPrecious:Ѱ±¦¹ºÂò  | 
| #RefreshFB:¸±±¾Ë¢Ð  | 
| #EfficientBattle:¸ßЧս¶·£¬¶à±¶¾Ñé  | 
| #PetRewashTalent:³èÎïÏ´×ÊÖÊ  | 
| #PetRewashSkill:³èÎïÏ´¼¼ÄÜ  | 
|   | 
| #OpenIndex: ¿ªÍ¨¶ÓÁÐË÷Òý  | 
| #ClearIndex: Çå³ý¶ÓÁÐcdʱ¼ä  | 
| #CDTime:cdʱ¼ä  | 
|   | 
| #SkilliD: ¼¼ÄÜID  | 
|   | 
| #StarLV:ÐǼ¶  | 
| #------------------------------------------------------------------------------------------------------------   | 
| #  | 
| # @change: "2012-03-24 22:20" Alee Ð޸ĵ¼Èë³ö´í£¬º¯Êý´ÓPlayerControlתGameWorld  | 
| # @change: "2012-08-21 16:30" Alee ³äÖµ¼Ç¼Ìí¼Ó²éѯ¶©µ¥ºÅ±ãÓÚ¶ÔÕË  | 
| # @change: "2012-08-22 11:30" jiang Ö÷ÌâÖܻ½±ÀøÁìÈ¡¼Ç¼Ôö¼Ó»î¶¯»ý·Ö¼Ç¼  | 
| # @change: "2012-08-24 13:59" whx »¶ÀÖËͻÐ޸ļǼË÷Òý  | 
| # @change: "2012-09-17 10:30" whx Ôö¼Ó¸£Àû»î¶¯½±ÀøÁìÈ¡¼Ç¼  | 
| # @change: "2012-09-21 17:00" jiang Íæ¼ÒËÀÍöÁ÷Ïò¼Ç¼  | 
| # @change: "2012-10-22 10:00" linyonggui Ìí¼Ó×¢ÊÍ,ÈçÓÐеÄÊý¾ÝÁ÷Ïò,ÇëÔÚGameServerÏÂSaveDataConfig.pyÖнøÐÐÌí¼Ó  | 
| # @change: "2012-09-25 14:30" linyonggui Ìí¼Ó×¢ÊÍ  | 
| # @change: "2012-12-07 18:00" hyx Ìí¼ÓÉÏÏÂÏßÁ÷Ïò¼Ç¼  | 
| # @change: "2013-01-24 14:40" Alee pythonµÄboolֵתÊý×Ö·½±ãÈë¿â  | 
| # @change: "2013-10-16 17:00" hxp Ìí¼Ó³äÖµºÀÀñÁì½±Á÷Ïò¼Ç¼  | 
| # @change: "2013-11-05 19:00" Alee ×¢ÊͲ¿·Ö¼Ç¼  | 
| # @change: "2013-12-26 20:20" Alee ¼õÉÙÁ÷Ïò¼Ç¼  | 
| # @change: "2013-12-26 20:20" Alee ¼õÉÙÁ÷Ïò¼Ç¼  | 
| # @change: "2014-06-10 21:00" hxp Ìí¼ÓÌØÊâ²É¼¯ÎïÁ÷Ïò¼Ç¼£¬¶àÑ¡ÎïÆ·Àñ°üÁ÷Ïò  | 
| # @change: "2014-06-21 15:20" hxp Ìí¼ÓÍæ¼ÒÁìÈ¡³äÖµÌØ»Ý»î¶¯½±Àø  | 
| # @change: "2014-10-11 15:00" hxp Ôö¼ÓÁìȡͶ×ʻر¨Ê¼þ¼Ç¼  | 
| # @change: "2014-12-01 19:10" ljd Ôö¼ÓÁìÈ¡ºÏ·þ»î¶¯µÇ½½±ÀøÊ¼þ¼Ç¼  | 
| # @change: "2014-12-21 23:00" hxp Ôö¼Ó¹¦Äܽ±ÀøÎïÆ·  | 
| # @change: "2014-12-23 00:30" hxp ³äֵǰ/Ïû·ÑʱÁ÷ÏòÐÅÏ¢À©Õ¹(Ôö¼Ó¸÷´ó¹¦ÄÜÐÅÏ¢)  | 
| # @change: "2015-02-05 15:00" hxp ³äÖµËÍÀñÁ÷ÏòÀ©Õ¹ÐÅÏ¢×Öµä  | 
| # @change: "2015-02-27 21:00" hxp Ôö¼Ó´óʦµÈ¼¶Éý¼¶Á÷Ïò; ÖØÐ¿ªÆô¼¼ÄÜѧϰÁ÷Ïò  | 
| # @change: "2015-03-30 14:00" hxp Ôö¼Ó»÷ɱNPCÁ÷Ïò  | 
| # @change: "2015-04-03 12:00" hxp Ñ°±¦ÈÕÖ¾Á÷Ïò  | 
| # @change: "2015-04-28 16:00" hxp ¿ªÆôBuyItemÁ÷Ïò£»Ñ°±¦Á÷ÏòÔö¼ÓÀ©Õ¹Êý¾Ý; ¸øÎïÆ·Á÷ÏòÐÞ¸Ä  | 
| # @change: "2015-05-20 21:00" hxp Ôö¼Ó×°±¸³Ô¾ÑéÁ÷Ïò  | 
| # @change: "2015-06-08 20:30" hxp ÐÂÊÖ¿¨Á÷ÏòÔö¼ÓµÈ¼¶¼°´´½Çʱ¼äÐÅÏ¢  | 
| # @change: "2015-07-03 15:30" ljd Éý½×ϵͳͳһÁ÷Ïò¼Ç¼  | 
| # @change: "2015-07-07 10:30" zqx ¶ñħ¾«»ªÁ÷Ïò¼Ç¼  | 
| # @change: "2015-07-13 14:00" hxp Ôö¼ÓpidÐÅÏ¢  | 
| # @change: "2015-09-21 20:30" hxp Ôö¼Ó×Ô¶¨Òå»õ±ÒÁ÷Ïò  | 
| # @change: "2015-10-19 12:00" ljd Ôö¼ÓÇ¿»¯Á÷Ïò¼Ç¼  | 
| #------------------------------------------------------------------------------   | 
| #"""Version = 2015-10-19 12:00"""  | 
| #------------------------------------------------------------------------------   | 
|   | 
| import GameWorld  | 
| import datetime  | 
| import IPY_GameWorld  | 
| import ChConfig  | 
| import ShareDefine  | 
| import PlayerControl  | 
| import PyGameData  | 
| #===============================================================================  | 
| ##·¢ËÍʼþ¼Ç¼¸øEventShell  | 
| # @param eventTypeStr: Ê¼þÀàÐͱêʶ  | 
| # @param dataDict: Ê¼þ×Öµä  | 
| # @return None  | 
| def SendEventPack(eventTypeStr, dataDict, curPlayer=None):  | 
|   | 
|     if curPlayer:  | 
|         pid = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerFromPID)  | 
|         dataDict["pid"] = pid  | 
|         dataDict["fightPower"] = curPlayer.GetFightPower()  | 
|         dataDict["PlayerLV"] = curPlayer.GetLV()  | 
|         dataDict["IP"] = curPlayer.GetIP()  | 
|     dataDict["time"] = str(datetime.datetime.today()).split(".")[0]  | 
|       | 
|     dataStr = str(dataDict)  | 
|     GameWorld.GetGameWorld().EventShell_SendEventEx(eventTypeStr, len(eventTypeStr), dataStr, len(dataStr))  | 
|     return  | 
|   | 
|   | 
| ## ¶þ´Î·ÇͬÌìµÇ½  | 
| #  @param accID: Õ˺ÅID  | 
| #  @param ip: ip  | 
| #  @return: None  | 
| def DR_OtherDayLogin(accID, ip, curPlayer):  | 
|       | 
|     dataDict = {'AccID':accID, 'IP':ip}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("OtherDayLogin", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## µÇ½  | 
| #  @param curPlayer Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def DR_PlayerLogin(curPlayer):  | 
|     accID = curPlayer.GetAccID()  | 
|     ip = curPlayer.GetIP()  | 
|     loginTime = curPlayer.GetLoginTime()  | 
|     name = curPlayer.GetName()  | 
|       | 
|     dataDict = {'Type':'login', 'IP':str(ip), 'AccID':accID,  | 
|                 'Name':name, 'LoginTime':str(loginTime), 'LogoutTime':'', 'MFPFightPower':GetMFPFightPowerInfo(curPlayer)}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("LogInOut", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼ÒÏÂÏß  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def DR_PlayerDisconnect(curPlayer):  | 
|     accID = curPlayer.GetAccID()  | 
|     ip = curPlayer.GetIP()  | 
|     name = curPlayer.GetName()  | 
|     logoutTime = curPlayer.GetLogoffTime()  | 
|     loginTime = curPlayer.GetLoginTime()  | 
|     lv = curPlayer.GetLV()  | 
|     vipLV = curPlayer.GetVIPLv()  | 
|     gold = curPlayer.GetGold()  | 
|     goldPaper = curPlayer.GetGoldPaper()  | 
|     dataDict = {'Type':'logout', 'IP':ip, 'AccID':accID, 'LV':lv, 'VipLV':vipLV,  | 
|                   'Name':name, 'LoginTime':str(loginTime), 'Gold':gold, 'GoldPaper':goldPaper,  | 
|                   'LogoutTime':str(logoutTime), 'MFPFightPower':GetMFPFightPowerInfo(curPlayer)}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("LogInOut", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def GetMFPFightPowerInfo(curPlayer):  | 
|     #¼Ç¼ģ¿éÕ½Á¦  | 
|     dataDict = {}  | 
|     for mfpType in ShareDefine.ModuleFightPowerTypeList:  | 
|         fightPower = PlayerControl.GetMFPFightPower(curPlayer, mfpType)  | 
|         dataDict[mfpType] = fightPower  | 
|     return dataDict  | 
|       | 
| ## ÐÂÔöÓÐЧµÇ½  | 
| #  @param accID: Õ˺ÅID  | 
| #  @param ip: ip  | 
| #  @return: None  | 
| def DR_LoginValid(accID, ip, curPlayer):  | 
|   | 
|     dataDict = {'AccID':accID, 'IP':ip}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("LoginValid", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÐÂÔöµÚÒ»´ÎµÇ½  | 
| #  @param accID: Õ˺ÅID  | 
| #  @param ip: ip  | 
| #  @return: None  | 
| def DR_FirstLogin(accID, ip, curPlayer):  | 
|   | 
|     dataDict = {'AccID':accID, 'IP':ip}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("FirstLogin", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ·ÅÉú³èÎï   | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param petID: ³èÎïID  | 
| #  @param petNPCID: ³èÎïNPCID  | 
| #  @param petNPCName: ³èÎïNPCÃû×Ö  | 
| #  @return: None  | 
| def DR_FreePet(curPlayer, petID, petNPCID, petNPCName):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PetID':petID, 'NPCID':petNPCID, 'NPCName':petNPCName}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("FreePet", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¸±±¾½±ÀøÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param mapID: µØÍ¼ID  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: ÎïÆ·ÊýÁ¿  | 
| #  @param isBind: ÊÇ·ñ°ó¶¨  | 
| #  @return: None  | 
| def DR_FBGiveItem(curPlayer, mapID, itemID, itemCnt, isBind):  | 
|     #MySql²»Ê¶±ð True False,¸Ä³É1ºÍ0  | 
|     isBind = 1 if isBind else 0  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'MapID':mapID, 'ItemID':itemID, 'ItemCount':itemCnt,   | 
|                 'IsBind':isBind}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("FBGiveItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¹¦Äܽ±ÀøÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param funcName: ¹¦ÄÜÃû  | 
| #  @param addDataDict:   | 
| #  @return: None  | 
| def DR_FuncGiveItem(curPlayer, funcName, addDataDict):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID()}  | 
|     dataDict.update(addDataDict)  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("GiveItem_%s" % funcName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## »ñµÃÈÎÎñ  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param missionID: ÈÎÎñID  | 
| #  @return: None  | 
| def DR_AddNewMission(curPlayer, missionID):  | 
|     return  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(), 'AccID':curPlayer.GetAccID(),   | 
|                 'MissionID':missionID}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("AddNewMission", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ##  Íê³ÉÈÎÎñ   | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param missionID: ÈÎÎñID  | 
| #  @return: None  | 
| def DR_DeleteMission(curPlayer, missionID):  | 
|     return  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'MissionID':missionID}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("DeleteMission", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ²Ö¿â´æÈë½ðÇ®  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param moneyType: ½ðÇ®ÀàÐÍ  | 
| #  @param moneyCount: ½ðÇ®ÊýÁ¿  | 
| #  @return: None  | 
| def DR_SetMoneyInWarehouse(curPlayer, moneyType, moneyCount):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),   | 
|                 'MoneyType':moneyType, 'MoneyCount':moneyCount,   | 
|                 'WarehouseMoneyCount':PlayerControl.GetWarehouseMoney(curPlayer, moneyType),   | 
|                 'PlayerMoneyCount':PlayerControl.GetMoney(curPlayer, moneyType)}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("SetMoneyInWarehouse", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ²Ö¿âÈ¡³ö½ðÇ®  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param moneyType: ½ðÇ®ÀàÐÍ  | 
| #  @param moneyCount: ½ðÇ®ÊýÁ¿  | 
| #  @return: None  | 
| def DR_GetMoneyInWarehouse(curPlayer, moneyType, moneyCount):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),   | 
|                 'MoneyType':moneyType, 'MoneyCount':moneyCount,   | 
|                 'WarehouseMoneyCount':PlayerControl.GetWarehouseMoney(curPlayer, moneyType),   | 
|                 'PlayerMoneyCount':PlayerControl.GetMoney(curPlayer, moneyType)}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("GetMoneyInWarehouse", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ³öÊÛÎïÆ·»ñµÃ½ðÇ®   | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param moneyType: ½ðÇ®ÀàÐÍ  | 
| #  @param moneyCount: ½ðÇ®ÊýÁ¿  | 
| #  @return: None  | 
| def DR_GetMoneyBySellPackItem(curPlayer, moneyType, moneyCount):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),   | 
|                 'MoneyType':moneyType, 'MoneyCount':moneyCount,   | 
|                 'PlayerMoneyCount':PlayerControl.GetMoney(curPlayer, moneyType)}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("GetMoneyBySellPackItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_CTGError(curPlayer, errorInfo, addDict):  | 
|     ## CTGÒì³£ÐÅÏ¢  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'ErrorInfo':errorInfo}  | 
|     dataDict.update(addDict)  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("CTGError", dataDict, curPlayer)  | 
|     GameWorld.ErrLog("%s. %s" % (errorInfo, addDict), curPlayer.GetPlayerID())  | 
|       | 
|     GameWorld.SendGameStateMail("CTGError:%s - %s"%(errorInfo, dataDict))  | 
|     return  | 
|   | 
| def DR_CTGOK(curPlayer, addDict):  | 
|     ## CTG³É¹¦¼Ç¼  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'LV':curPlayer.GetLV()}  | 
|     dataDict.update(addDict)  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("CTGOK", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò³äÖµºóµÄÔª±¦ÐÅÏ¢  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param addGold: ÔöÖµÔª±¦  | 
| #  @param totalGold: Ê£ÓàÔª±¦  | 
| #  @return: None  | 
| def DR_PlayerGoldAfterCharge(curPlayer, addGold, totalGold):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'AddGold':addGold, 'TotalGold':totalGold}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerGoldAfterCharge", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò³äֵǰµÄÏà¹ØÐÅÏ¢  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param infoDict: ¶îΪÔùËÍÊý  | 
| #  @return: None  | 
| def DR_PlayerInfoBeforeCharge(curPlayer, infoDict={}):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'VIPLV':curPlayer.GetVIPLv(), 'PlayerLV':curPlayer.GetLV(),  | 
|                 'TotalGold':curPlayer.GetGold(),  | 
|                 }  | 
|       | 
|     dataDict.update(__GetFuncDRDict(curPlayer))  | 
|     dataDict.update(infoDict)  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerInfoBeforeCharge", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ¹¦ÄÜÁ÷ÏòÐÅÏ¢  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: {}  | 
| def __GetFuncDRDict(curPlayer):  | 
|     drDict = {}  | 
|       | 
|     # ¹Ù¾ô½×¼¶¡¢×£¸£Öµ  | 
|     offBlessValue = 0  | 
|     offRank = curPlayer.GetOfficialRank()  | 
|     drDict["Official"] = [offRank, offBlessValue]  | 
|       | 
|     return drDict  | 
|   | 
| ## Íæ¼Ò³äÖµºóµÄµãȯÐÅÏ¢¼°vipµÈ¼¶  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param changeCoin: ¶Ò»»µÄµãȯÊý  | 
| #  @param totaChangelCoin: ×ܶһ»µãȯÊý  | 
| #  @param prizeCoin: ÔùË͵ãȯÊý  | 
| #  @param totalPrizeCoin: ×ÜÔùË͵ãȯÊý  | 
| #  @param playerVIPLV: vipµÈ¼¶  | 
| #  @param crazyCoin: ¶îΪÔùËÍÊý  | 
| #  @return: None  | 
| def DR_PlayerCoinAfterCharge(curPlayer, changeCoin, totaChangelCoin, prizeCoin,   | 
|                              totalPrizeCoin, playerVIPLV, crazyCoin, orderID):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'ChangeCoin':changeCoin, 'TotaChangelCoin':totaChangelCoin,  | 
|                 'PrizeCoin':prizeCoin, 'TotalPrizeCoin':totalPrizeCoin, 'VIPLv':playerVIPLV,   | 
|                 "CrazyCoin":crazyCoin, 'QueryOrderID':orderID}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerCoinAfterCharge", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼ÒÉý¼¶  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param playerLV: Íæ¼ÒµÈ¼¶  | 
| #  @param playerTotalExp: Íæ¼Ò×ܾÑéÖµ  | 
| #  @param curLVRequireExp: µ±Ç°µÈ¼¶Éý¼¶ÐèÒª¾ÑéÖµ  | 
| #  @return: None  | 
| def DR_PlayerUpgrade(curPlayer, playerLV, playerTotalExp, curLVRequireExp):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':playerLV, 'PlayerTotalExp':playerTotalExp,   | 
|                 'CurLVRequireExp':curLVRequireExp, 'IP':curPlayer.GetIP()}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerUpgrade", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò´óʦµÈ¼¶±ä¸ü  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param totalMasterExp: µ±Ç°×Ü´óʦ¾Ñé  | 
| #  @param eventName: ±ä¸üʼþÃû  | 
| #  @return: None  | 
| def DR_PlayerMasterLVChange(curPlayer, totalMasterExp, addDataDict={}):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(), 'PlayerLVEx':curPlayer.GetLVEx(),   | 
|                 'TotalExp':curPlayer.GetTotalExp(), 'MasterLV':curPlayer.GetLV2(),   | 
|                 'TotalExpMaster':totalMasterExp}  | 
|       | 
|     dataDict.update(addDataDict)  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerMasterLVChange", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ##³äÖµËÍÎïÆ·  | 
| def DR_BillingGiveItem(curPlayer, itemID, itemCnt):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 "ItemID":itemID,  | 
|                 'ItemCount':itemCnt  | 
|                 }  | 
|       | 
|     SendEventPack("BillingGiveItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ##³äÖµÁìºÀÀñ  | 
| def DR_GoldGiftGiveItem(curPlayer, giftNum, infoDict={}):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 "GiftNum":giftNum  | 
|                 }  | 
|       | 
|     dataDict.update(infoDict)  | 
|     SendEventPack("GoldGiftGiveItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ##ÀۼƵǽÀñ°ü  | 
| def DR_LoginDayAward(curPlayer, dayIndex):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 "DayIndex":dayIndex  | 
|                 }  | 
|       | 
|     SendEventPack("LoginDayAward", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ##µÈ¼¶Àñ°ü  | 
| def DR_LVAward(curPlayer, awardID):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 "AwardID":awardID  | 
|                 }  | 
|       | 
|     SendEventPack("LVAward", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Ê¹ÓÃÐÂÊÖýÌ忨  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param cardStr: ¿¨ºÅ  | 
| #  @param cardType: ¿¨µÄkey  | 
| #  @param itemID: ¸øÓèÎïÆ·ID  | 
| #  @param itemCnt: ¸øÓèÎïÆ·ÊýÁ¿  | 
| #  @return: None  | 
| def DR_UseNewGuyCard(curPlayer, cardStr, cardType, itemID, itemCnt):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'LV':curPlayer.GetLV(),  | 
|                 'LVEx':curPlayer.GetLVEx(),  | 
|                 'CreateRoleTime':curPlayer.GetCreateRoleTime(),  | 
|                 'CardStr':cardStr,  | 
|                 'CardType':cardType,  | 
|                 "ItemID":itemID,  | 
|                 'ItemCount':itemCnt  | 
|                 }  | 
|       | 
|     SendEventPack("UseNewGuyCard", dataDict, curPlayer)  | 
|     return  | 
|       | 
| def DR_UseMediaCard(curPlayer, cardCode, cardType, awardItemList, addDataDict={}):  | 
|     # Ê¹ÓÃÐÂýÌ忨  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'LV':curPlayer.GetLV(), 'CardCode':cardCode, 'CardType':cardType,  | 
|                 "AwardItemList":awardItemList,  | 
|                 }  | 
|     dataDict.update(addDataDict)  | 
|     SendEventPack("UseMediaCard", dataDict, curPlayer)  | 
|     return  | 
|       | 
| ## ¿ª·þ»î¶¯½±ÀøÁìÈ¡Çé¿ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param dataDict: ¼Ç¼ÐÅÏ¢×Öµä  | 
| #  @return: None  | 
| def DR_OpenServerAward(curPlayer, dataDict):  | 
|     dataDict["PlayerID"] = curPlayer.GetPlayerID()  | 
|     dataDict["AccID"] = curPlayer.GetAccID()  | 
|     dataDict["PlayerName"] = curPlayer.GetPlayerName()  | 
|       | 
|     SendEventPack("OpenServerAward", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## GMÖ´ÐÐÃüÁî²Ù×÷  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @param playerName:Íæ¼ÒÃû×Ö  | 
| #  @param accID: Íæ¼ÒÕ˺Š | 
| #  @param gmToolCmd:gmÃüÁî  | 
| #  @param msg:¸½¼ÓÃüÁî  | 
| #  @return: None  | 
| def DR_ToolGMOperate(playerID, playerName, accID, gmToolCmd, msg=''):  | 
|     dataDict = {"PlayerID":playerID, 'PlayerName':playerName, 'AccID':accID,   | 
|                 'GMOperate':gmToolCmd, 'Msg':msg}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  | 
|     SendEventPack("GMToolOperate", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ³öÊÛÖ¸¶¨±³°üÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param dataDict: ¼Ç¼ÐÅÏ¢×Öµä  | 
| #  @return:   | 
| def DR_SellPackItem(curPlayer, dataDict):  | 
|     dataDict.update({"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                      "AccID":curPlayer.GetAccID()})  | 
|     SendEventPack("SellPackItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## É¾³ý±³°üÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param dataDict: ¼Ç¼ÐÅÏ¢×Öµä  | 
| #  @return:   | 
| def DR_DeleteItemInRecycle(curPlayer, dataDict):  | 
|     dataDict.update({"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                      "AccID":curPlayer.GetAccID()})  | 
|     SendEventPack("DeleteItemInRecycle", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¹ºÂòÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemId: ÎïÆ·ID  | 
| #  @param buyCount: ÎïÆ·ÊýÁ¿  | 
| #  @param itemGuid: ÎïÆ·GUID  | 
| #  @return:   | 
| def DR_BuyItem(curPlayer, eventName, itemId, buyCount, itemGuid, addDataDict={}):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(), "ItemID":itemId, "ItemCount":buyCount, "ItemGUID":itemGuid}  | 
|     dataDict.update(addDataDict)  | 
|     SendEventPack("BuyItem_%s" % eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÈÎÎñ¸øÓè½ðÇ®  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: Ê¼þÀàÐÍ  | 
| #  @param missionID: ÈÎÎñID  | 
| #  @param moneyType: ½ðÇ®ÀàÐÍ  | 
| #  @param moneyCount: ½ðÇ®ÊýÁ¿  | 
| #  @return:   | 
| def DR_EventAddMoney(curPlayer, eventName, missionID, moneyType, moneyCount):  | 
|     return  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "MissionID":missionID, "MoneyType":moneyType, "MoneyCount":moneyCount,   | 
|                 'PlayerMoneyCount':PlayerControl.GetMoney(curPlayer, moneyType)}  | 
|       | 
|     SendEventPack("EventAddMoney_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÈÎÎñ¸øÓè¾Ñé  | 
| def DR_EventAddExp(curPlayer, missionID, exp):  | 
|     return  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "MissionID":missionID, "GiveExp":exp, "PlayerExp":curPlayer.GetTotalExp()}  | 
|       | 
|     SendEventPack("EventAddExp", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## É¾³ýÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: ¹¦ÄÜʼþÃû  | 
| #  @param dataDict: ¼Ç¼ÏûÏ¢  | 
| #  @return: None  | 
| def DR_DeleteItem(curPlayer, eventName, delItemInfoDict, extraDict={}):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(delItemInfoDict)  | 
|     dataDict.update(extraDict)  | 
|       | 
|     SendEventPack("DeleteItem_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## »î¶¯ÆÚ¼äÈÎÒâÖØÖøøÓèÎïÆ·  | 
| #  @param cyrPlayer: Íæ¼ÒʵÀý  | 
| #  @param giveItemInfoDict: ÎïÆ·ÐÅÏ¢×Öµä  | 
| #  @return  | 
| def DR_RandCoinGiveItem(curPlayer, giveItemInfoDict):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(giveItemInfoDict)  | 
|       | 
|     SendEventPack("RandCoinGiveItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## »î¶¯ÆÚ¼äµ¥´Î³äÖµ¸øÓèÎïÆ·  | 
| #  @param cyrPlayer: Íæ¼ÒʵÀý  | 
| #  @param giveItemInfoDict: ÎïÆ·ÐÅÏ¢×Öµä  | 
| #  @return  | 
| def DR_OnTimeCoinGiveItem(curPlayer, giveItemInfoDict):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(giveItemInfoDict)  | 
|       | 
|     SendEventPack("OnTimeCoinGiveItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÀۼƳäÖµ¸øÓèÎïÆ·  | 
| #  @param cyrPlayer: Íæ¼ÒʵÀý  | 
| #  @param giveItemInfoDict: ÎïÆ·ÐÅÏ¢×Öµä  | 
| #  @return  | 
| def DR_TotalCoinGiveItem(curPlayer, giveItemInfoDict):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(giveItemInfoDict)  | 
|       | 
|     SendEventPack("TotalCoinGiveItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Êͷż¼ÄÜÏûºÄÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: ÎïÆ·ÊýÁ¿  | 
| #  @param itemGuid: Íæ¼ÒGUID  | 
| #  @param skillID: ¼¼ÄÜID  | 
| #  @return:   | 
| def DR_UseSkilLostItem(curPlayer, itemID, itemCnt, itemGuid, skillID):  | 
|     return  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "ItemID":itemID, "ItemCount":itemCnt, "ItemGUID":itemGuid, "SkillID":skillID}  | 
|       | 
|     SendEventPack("UseSkilLostItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ±³°üÎïÆ·½»»»  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: Íæ¼ÒÊýÁ¿  | 
| #  @param itemGuid: Íæ¼ÒGUID  | 
| #  @param srcPackType: Æðʼ±³°üÀàÐÍ  | 
| #  @param descPackType: Ä¿±ê±³°üÀàÐÍ  | 
| #  @return: None  | 
| def DR_ChangePackItem(curPlayer, itemID, itemCnt, itemGuid, srcPackType, descPackType):  | 
|     return  | 
|       | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "ItemID":itemID, "ItemCount":itemCnt, "ItemGUID":itemGuid,  | 
|                 "SrcPackType":srcPackType, "DescPackType":descPackType}  | 
|       | 
|     SendEventPack("ChangePackItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÉèÖòֿâÃÜÂë  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param OldPsw: ¾ÉÃÜÂë  | 
| #  @param NewPsw: ÐÂÃÜÂë  | 
| #  @return:   | 
| def DR_SetWarehousePsw(curPlayer, oldPsw, newPsw):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "OldPsw":oldPsw, "NewPsw":newPsw}  | 
|       | 
|     SendEventPack("SetWarehousePsw", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÏûºÄ½ðÇ®  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: ¹¦ÄÜʼþÃû  | 
| #  @param moneyType: ½ðÇ®ÀàÐÍ  | 
| #  @param moneyCount: ½ðÇ®ÊýÁ¿  | 
| #  @param addDataDict: ¸½¼ÓÐÅÏ¢  | 
| #  @return:   | 
| def DR_UseMoney(curPlayer, eventName, moneyType, moneyCount, addDataDict={}):  | 
|     if moneyCount <= 0:  | 
|         return  | 
|       | 
|     #±ÜÃâ¼Ç¼̫¶àÐÅÏ¢  | 
|     if moneyType in [IPY_GameWorld.TYPE_Price_Silver_Money] and moneyCount < ChConfig.Def_DRRecord_Min_Silver:  | 
|         return  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), "eventName":eventName,  | 
|                 'MoneyType':moneyType, 'MoneyCount':moneyCount,   | 
|                 'PlayerMoneyCount':PlayerControl.GetMoney(curPlayer, moneyType),   | 
|                 'VIPLV':curPlayer.GetVIPLv(), 'PlayerLV':curPlayer.GetLV()}  | 
|       | 
|     dataDict.update(addDataDict)  | 
|     dataDict.update(__GetFuncDRDict(curPlayer))  | 
|       | 
|     #½ð×Ó  | 
|     if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money:  | 
|         SendEventPack("UseGold", dataDict, curPlayer)  | 
|       | 
|     #½ðƱ  | 
|     elif moneyType == IPY_GameWorld.TYPE_Price_Gold_Paper:  | 
|         SendEventPack("UseGoldPaper", dataDict, curPlayer)  | 
|       | 
|     #Òø×Ó  | 
|     elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Money:  | 
|         SendEventPack("UseSilver", dataDict, curPlayer)  | 
|       | 
|     #񿮱  | 
|     elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Paper:  | 
|         SendEventPack("UseSilverPaper", dataDict, curPlayer)  | 
|   | 
|     #×Ô¶¨Òå»õ±Ò  | 
|     elif moneyType in ShareDefine.TYPE_Price_CurrencyDict:  | 
|         SendEventPack("UseCurrency_%s" % moneyType, dataDict, curPlayer)  | 
|          | 
|     #Õ½Ã˹±Ï×  | 
|     elif moneyType == ShareDefine.TYPE_Price_Family_Contribution:  | 
|         SendEventPack("UseFamilyContribution", dataDict, curPlayer)  | 
|                    | 
|     return  | 
|   | 
| ## »ñµÃ½ðÇ®  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: ¹¦ÄÜʼþÃû  | 
| #  @param moneyType: ½ðÇ®ÀàÐÍ  | 
| #  @param moneyCount: ½ðÇ®ÊýÁ¿  | 
| #  @param addDataDict: ¸½¼ÓÐÅÏ¢  | 
| #  @return:   | 
| def DR_GiveMoney(curPlayer, eventName, moneyType, moneyCount, addDataDict={}):  | 
|     if moneyCount <= 0:  | 
|         return  | 
|       | 
|     #±ÜÃâ¼Ç¼̫¶àÐÅÏ¢  | 
|     if moneyType in [IPY_GameWorld.TYPE_Price_Silver_Money] and moneyCount < ChConfig.Def_DRRecord_Min_Silver:  | 
|         return  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), "eventName":eventName,  | 
|                 'MoneyType':moneyType, 'MoneyCount':moneyCount,   | 
|                 'PlayerMoneyCount':PlayerControl.GetMoney(curPlayer, moneyType),   | 
|                 'VIPLV':curPlayer.GetVIPLv(), 'PlayerLV':curPlayer.GetLV()}  | 
|       | 
|     dataDict.update(addDataDict)  | 
|     dataDict.update(__GetFuncDRDict(curPlayer))  | 
|       | 
|     #½ð×Ó  | 
|     if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money:  | 
|         SendEventPack("GiveGold", dataDict, curPlayer)  | 
|       | 
|     #½ðƱ  | 
|     elif moneyType == IPY_GameWorld.TYPE_Price_Gold_Paper:  | 
|         SendEventPack("GiveGoldPaper", dataDict, curPlayer)  | 
|       | 
|     #Òø×Ó  | 
|     elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Money:  | 
|         SendEventPack("GiveSilver", dataDict, curPlayer)  | 
|       | 
|     #񿮱  | 
|     elif moneyType == IPY_GameWorld.TYPE_Price_Silver_Paper:  | 
|         SendEventPack("GiveSilverPaper", dataDict, curPlayer)  | 
|       | 
|     #×Ô¶¨Òå»õ±Ò  | 
|     elif moneyType in ShareDefine.TYPE_Price_CurrencyDict:  | 
|         SendEventPack("GiveCurrency_%s" % moneyType, dataDict)  | 
|           | 
|     return  | 
|   | 
| ## »ñµÃ½ðǮʧ°Ü  | 
| def DR_GiveMoneyError(curPlayer, priceType, value, giveType, addDataDict):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), "GiveType":giveType, "GiveValue":value, "AddDataDict":addDataDict}  | 
|     SendEventPack("GiveMoneyError_%s" % priceType, dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## »ñµÃÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: ¹¦ÄÜʼþÃû  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param curPlayer: ÎïÆ·ÊýÁ¿  | 
| #  @param addDataDict: ¸½¼ÓÐÅÏ¢  | 
| #  @return:   | 
| def DR_SetPlayerItem(curPlayer, eventName, itemDataDict, addDataDict={}):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID()}  | 
|       | 
|     dataDict.update(itemDataDict)  | 
|     dataDict.update(addDataDict)  | 
|     SendEventPack("GivePlayerItem_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ×°±¸¼Ó¹¤  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: ¹¦ÄÜʼþÃû  | 
| #  @param addDataDict: ¸½¼ÓÐÅÏ¢  | 
| #  @return:   | 
| def DR_EquipMachining(curPlayer, eventName, addDataDict):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(addDataDict)  | 
|       | 
|     SendEventPack("EquipMachining_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_StoneItemChange(curPlayer, eventName, addDict={}):  | 
|     # ¼Ç¼±¦Ê¯ÎïÆ·±ä¸ü  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(addDict)  | 
|     SendEventPack("StoneChange_%s"%eventName, dataDict, curPlayer)  | 
|     Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_StoneChange, addDict)  | 
|     return  | 
|   | 
| def DR_VIPChange(curPlayer, eventName, addDict={}):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|     dataDict.update(addDict)  | 
|       | 
|     SendEventPack("VIPTimeChange_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Ñ§Ï°ºÍÉý¼¶¼¼ÄÜ  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param SkillID: ¼¼ÄÜID  | 
| #  @param skillLV: ¼¼Äܵȼ¶  | 
| #  @return:    | 
| def DR_LearnORUPSkill(curPlayer, skillID, skillLV):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "skillID":skillID, "LV":skillLV}  | 
|       | 
|     SendEventPack("LearnORUPSkill", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Ë鯬ºÏ³É¸øÓèÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: ÎïÆ·ÊýÁ¿  | 
| #  @param isBind: ÊÇ·ñ°ó¶¨  | 
| #  @return:   | 
| def DR_StuffMachining(curPlayer, itemID, itemCnt, isBind):  | 
|     return  | 
|     #MySql²»Ê¶±ð True False,¸Ä³É1ºÍ0  | 
|     isBind = 1 if isBind else 0  | 
|       | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "ItemID":itemID, "ItemCount":itemCnt, "IsBind":isBind}  | 
|       | 
|     SendEventPack("StuffMachining", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ±³°ü¸ñ×ÓÊýÁ¿¹ºÂò  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param packType: ±³°üÀàÐÍ  | 
| #  @param buyCnt: ¹ºÂò¸ñ×ÓÊý  | 
| #  @param totalCnt: ×ܹºÂòÊý  | 
| #  @return:   | 
| def DR_OpenPackCount(curPlayer, packType, buyCnt, tatleCnt):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "PackType":packType, "Count":buyCnt, "TotalCount":tatleCnt}  | 
|       | 
|     SendEventPack("OpenPackCount", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Ð¦¶÷¼µãÊý¸Ä±ä  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param changePoint: ¸Ä±äµãÊý  | 
| #  @param resultPoint: ½á¹ûµãÊý  | 
| #  @return:   | 
| def DR_EventXELPoint(curPlayer, changePoint, resultPoint):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "ChangePoing":changePoint, "Point":resultPoint}  | 
|       | 
|     SendEventPack("EventXELPoint", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Ìí¼Ó³ÆºÅ  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: À´Ô´Ê¼þÃû  | 
| #  @param titleID: ³ÆºÅID  | 
| #  @param addDataDict: ¸½¼ÓÊôÐÔ  | 
| #  @return  | 
| def DR_AddTitle(curPlayer, eventName, titleID, addDataDict={}):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "ItemID":titleID}  | 
|     dataDict.update(addDataDict)  | 
|       | 
|     SendEventPack("AddTitle_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼ÒÊ£ÓàÊôÐ﵋  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: À´Ô´Ê¼þÃû  | 
| #  @param point: µãÊý  | 
| #  @param addDataDict: ¸½¼ÓÊôÐÔ  | 
| def DR_Freepoint(curPlayer, eventName, point, addDataDict={}):  | 
|     return  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "Point":point, "TotalPoint":curPlayer.GetFreePoint()}  | 
|     dataDict.update(addDataDict)  | 
|       | 
|     SendEventPack("Freepoint_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÕæÆø¸Ä±ä  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: Ê¼þÀàÐÍ  | 
| #  @param value: ÊýÖµ  | 
| #  @param addDataDict: ¸½¼ÓÊôÐÔ  | 
| def DR_ChangeZhenQi(curPlayer, eventName, value, addDataDict={}):  | 
|     return  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),  | 
|                 "Value":value, "TotalValue":curPlayer.GetExAttr5()}  | 
|       | 
|     dataDict.update(addDataDict)  | 
|       | 
|     SendEventPack("ChangeZhenQi_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Ê¹ÓóèÎïÂú»ê£¬µÃµ½³èÎï  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemGUID: ÎïÆ·GUID  | 
| #  @param petNpcName: ³èÎïNPCÃû×Ö  | 
| #  @param petNpcID: ³èÎïNPC  | 
| #  @return:   | 
| def DR_UsePetSoul(curPlayer, itemID, itemGUID, petNpcName, petNpcID):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID(),   | 
|                 "ItemID":itemID, "ItemGUID":itemGUID, "NPCID":petNpcID, "NPCName":petNpcName}  | 
|       | 
|     SendEventPack("UsePetSoul", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ïÚ³µ  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: Ê¼þÃû  | 
| #  @param addDataDict: ¸½¼ÓÊôÐÔ  | 
| #  @return:   | 
| def DR_Truck(curPlayer, eventName, addDataDict):  | 
|     dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 "AccID":curPlayer.GetAccID()}  | 
|       | 
|     dataDict.update(addDataDict)  | 
|       | 
|     SendEventPack("Truck_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ÉèÖÃÍæ¼ÒSB״̬  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param state: ×´Ì¬  | 
| #  @return:   | 
| def SetPlayerSBState(curPlayer, state):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), "State":state}   | 
|       | 
|     SendEventPack("SetPlayerSBState", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò¼Ò×åÐÅÏ¢  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName: Ê¼þÃû  | 
| #  @param addDataDict: ¸½¼ÓÊôÐÔ  | 
| #  @return:   | 
| def DR_PlayerFamily(curPlayer, eventName, addDataDict):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID()}      | 
|     dataDict.update(addDataDict)  | 
|       | 
|     SendEventPack("PlayerFamily_%s"%eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## »ñµÃÍþÍûÖµ  | 
| #  @param curPlayer Íæ¼ÒʵÀý  | 
| #  @param addPrestige Ìí¼ÓÖµ  | 
| #  @param addType ÔÒò  | 
| #  @return  | 
| def DR_GetPrestigeValue(curPlayer, addPrestige, addType):  | 
|     return  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 "Prestige":addPrestige, "TotalPrestige":PlayerControl.GetPrestige(curPlayer), "Type":addType}  | 
|       | 
|     SendEventPack("GetPrestigeValue", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Ê§È¥ÍþÍûÖµ  | 
| #  @param curPlayer Íæ¼ÒʵÀý  | 
| #  @param addPrestige Ìí¼ÓÖµ  | 
| #  @param addType ÔÒò  | 
| #  @return  | 
| def DR_LostPrestigeValue(curPlayer, addPrestige, addType):  | 
|     return  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 "Prestige":addPrestige, "TotalPrestige":PlayerControl.GetPrestige(curPlayer), "Type":addType}  | 
|       | 
|     SendEventPack("LostPrestigeValue", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¼Ç¼´íÎóÐÅÏ¢  | 
| #  @param info: ´íÎóÐÅÏ¢  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @param playerName: Íæ¼ÒÃû×Ö  | 
| #  @param accID: Õ˺ÅID  | 
| #  @return  | 
| def DR_ErrorInfo(info, playerID, playerName, accID):  | 
|     curMapID = GameWorld.GetMap().GetMapID()  | 
|       | 
|     dataDict = {"errInfo":info, "mapID":curMapID, "playerID":playerID, "PlayerName":playerName, "accID":accID}  | 
|       | 
|     SendEventPack("ErrorInfo", dataDict)  | 
|     return  | 
|       | 
|   | 
| ## Íæ¼ÒÒ»´ÎÐÔ¶Ò»»µã¾íËÍÔª±¦  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param useCoin: ¶Ò»»µãȯÊý  | 
| #  @param giveGold:¸øÓèÔª±¦  | 
| #  @return   | 
| def DR_OneTimeCoinGiveGold(curPlayer, useCoin, giveGold):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'UseCoin':useCoin, 'GiveGold':giveGold, 'TotalGold':curPlayer.GetGold()}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("OneTimeCoinGiveGold", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Ôö¼ÓÍæ¼Ò¼Ò×å»îÔ¾¶È  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param addValue: Ôö¼ÓÖµ  | 
| #  @param curValue: Ôö¼ÓºóÖµ  | 
| #  @param reason:Ôö¼ÓÔÒò  | 
| #  @return   | 
| def DR_AddPlayerFamilyActiveValue(curPlayer, addValue, curValue, reason):  | 
|     return  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'addValue':addValue, 'FamilyActiveValue':curValue, 'Reason':reason}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("AddPlayerFamilyActiveValue", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ³èÎï¼Óµã  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param petID: ³èÎïid  | 
| #  @param refreshType: ÔöµãÀàÐÍ  | 
| #  @param addPoint: Ôö¼ÓµãÊý  | 
| #  @param npcID: ³èÎïnpcid  | 
| #  @return   | 
| def DR_PetAddPoint(curPlayer, petID, refreshType, addPoint, npcID):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'PetID':petID, 'AttrType':refreshType, 'AddPoint':addPoint, 'NPCID':npcID}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PetAddPoint", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ³èÎï¼ÓÇ×ÃÜ¶È  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param petID: ³èÎïid  | 
| #  @param addValue: Ôö¼ÓµãÊý  | 
| #  @param npcID: ³èÎïnpcid  | 
| #  @param curFriendliness: ÔöµãÀàÐÍ  | 
| #  @return   | 
| def DR_AddFriendliness(curPlayer, petID, addValue, petNPCID, curFriendliness):  | 
|   | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'PetID':petID, 'AddValue':addValue, 'Friendliness':curFriendliness, 'NPCID':petNPCID}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("AddFriendliness", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼ÒÉýÐÇ  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param starLV: ÎïÆ·ÐǼ¶  | 
| #  @param addDataDict: ¸½¼Ó²ÄÁϵÄ×Öµä  | 
| #  @return         | 
| def DR_UpStarLVSuccess(curPlayer, exp, starLV):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), "StarLV":starLV, "Exp":exp}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("UpStarLVSuccess", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼ÒËÀÍö  | 
| #  @param tagObjType: ¹¥»÷·½ÀàÐÍ  | 
| #  @param tagObj: ¹¥»÷·½ID  | 
| #  @param mapID: ËÀÍöÍæ¼ÒËùÔÚµØÍ¼ID  | 
| #  @return  | 
| def DR_PlayerDead(atkObjType, atkObjID, curPlayer, mapID):  | 
|     return  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'MapID':mapID,   | 
|                 'AtkObjType':atkObjType, "ObjID":atkObjID}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerDead", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¸ø´æ½±Àø±íÎïÆ·  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param rewardType: ½±ÀøÀàÐÍ  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: ÎïÆ·¸öÊý  | 
| #  @return  | 
| def DR_PlayerGetReward(curPlayer, rewardType, itemID, itemCnt):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'itemID':itemID, 'itemCnt':itemCnt,  | 
|                 'rewardType':rewardType}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerGetReward", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ÉêÇë¼ÓÈë¹ó±ö¾ãÀÖ²¿  | 
| #  @param curPlayer  | 
| #  @param hasRegister: Ö®Ç°ÊÇ·ñÒѱ¨Ãû  | 
| #  @param moneyType: ÏûºÄ½ðÇ®ÀàÐÍ  | 
| #  @param money: ÏûºÄ½ðÇ®ÊýÁ¿  | 
| #  @return  | 
| def DR_ApplyVIPClub(curPlayer, name, sex, tel, mail, addr, qq, birthday, postalcode, serverID, giveItemOK):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), "QQ":qq,  | 
|                 'AccID':curPlayer.GetAccID(), 'Name':name, "Sex":sex, "Tel":tel, "Mail":mail, "Address":addr,  | 
|                 "Birthday":birthday, "Postalcode":postalcode, "ServerID":serverID, "GiveItemOK":giveItemOK}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("ApplyVIPClub", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¿ç·þÈü±¨Ãû  | 
| #  @param curPlayer  | 
| #  @param hasRegister: Ö®Ç°ÊÇ·ñÒѱ¨Ãû  | 
| #  @param moneyType: ÏûºÄ½ðÇ®ÀàÐÍ  | 
| #  @param money: ÏûºÄ½ðÇ®ÊýÁ¿  | 
| #  @return  | 
| def DR_MergeWarRegister(curPlayer, hasRegisterCnt, moneyType, money):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'HasRegisterCnt':hasRegisterCnt,  | 
|                 'MoneyType':moneyType, "MoneyCnt":money}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("MergeWarRegister", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ¿ç·þÈü±¨Ãû½á¹û  | 
| #  @param curPlayer  | 
| #  @param hasRegister: Ö®Ç°ÊÇ·ñÒѱ¨Ãû  | 
| #  @param moneyType: ÏûºÄ½ðÇ®ÀàÐÍ  | 
| #  @param money: ÏûºÄ½ðÇ®ÊýÁ¿  | 
| #  @return  | 
| def DR_MergeWarRegisterResult(curPlayer, result, errorMsg, newAccount):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'Result':result, "ErrorMsg":errorMsg, "NewAccount":newAccount}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("MergeWarRegisterResult", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| #Supernatural-------------------------------------------------------------------------------  | 
| ## ½»Ò׳öÊÛÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param tagPlayer: ÎïÆ·ID  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: ÎïÆ·ÊýÁ¿  | 
| #  @param itemData: ÎïÆ·ÐÅÏ¢  | 
| #  @return  | 
| def DR_TradeLostItem(curPlayer, tagPlayer, itemID, itemCnt, itemData):     | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'TagPlayer':tagPlayer.GetPlayerID(), "ItemID":itemID,  | 
|                 "ItemCnt":itemCnt}  | 
|       | 
|     dataDict.update(itemData)  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("TradeLostItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ½»Ò×¹ºµÃÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param tagPlayer: ÎïÆ·ID  | 
| #  @param itemID: ÎïÆ·ID  | 
| #  @param itemCnt: ÎïÆ·ÊýÁ¿  | 
| #  @return  | 
| def DR_TradeGetItem(curPlayer, tagPlayer, itemID, itemCnt, itemData):     | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'TagPlayer':tagPlayer.GetPlayerID(), "ItemID":itemID,  | 
|                 "ItemCnt":itemCnt}  | 
|   | 
|     dataDict.update(itemData)  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("TradeGetItem", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ½»Ò×ÖнðÇ®±ä»¯  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param tagPlayer: Ä¿±êÍæ¼Ò  | 
| #  @param goldEx: ½»Ò×ǰԪ±¦  | 
| #  @param silverEx:½»Ò×ǰ Òø×Ó  | 
| #  @param gPaperEx: ½»Ò×ǰ½ðƱ  | 
| #  @param sPaperEx: ½»Ò×Ç°ÒøÆ±  | 
| #  @return  | 
| def DR_TradeMoney(curPlayer, tagPlayer, goldEx, silverEx, gPaperEx, sPaperEx):     | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'TagPlayer':tagPlayer.GetPlayerID(),   | 
|                 "Gold":curPlayer.GetGold(), "Silver":PlayerControl.GetSilver(curPlayer),   | 
|                 "GoldPaper":curPlayer.GetGoldPaper(), "SilverPaper":curPlayer.GetSilverPaper(),  | 
|                 "GoldEx":goldEx, "SilverEx":silverEx, "GPaperEx":gPaperEx, "SPaperEx":sPaperEx}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("TradeMoney", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼ÒÂíÆ¥½ø½×  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param classLV: ½×¼¶  | 
| #  @param horseID: ÐÂÂíÆ¥id  | 
| #  @return: None  | 
| def DR_NewHorseByClassUp(curPlayer, classLV, horseID):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'ClassLV':classLV,  | 
|                 'HorseID':horseID,  | 
|                 }  | 
|       | 
|     SendEventPack("NewHorseByClassUp", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ×øÆï»Ã»¯Æ¤·ôɾ³ý  | 
| def DR_HorseSkinDel(curPlayer, skinID):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'skinID':skinID,}  | 
|     SendEventPack("HorseSkinDel", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò½ø½×ʽϵͳÁ÷Ïò¼Ç¼  | 
| #  @param curPlayer  | 
| #  @param classLV ½×¼¶  | 
| #  @param extraInfoDict Ô¤ÁôÐÅÏ¢×Öµä  | 
| #  @return: None  | 
| def DR_ClassUpSystem(curPlayer, drKey, classLV, extraInfoDict={}):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(),  | 
|                 'ClassLV':classLV,  | 
|                 }  | 
|     dataDict.update(extraInfoDict)  | 
|     SendEventPack(drKey, dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ×°±¸ºÏ³ÉÎïÆ·  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param itemID: ÎïÆ·id  | 
| #  @param itemCnt: ÎïÆ·ÊýÁ¿  | 
| #  @param itemData: ÎïÆ·Êý¾Ý  | 
| #  @return: None  | 
| def DR_EquipCompound(curPlayer, recordName, itemID, itemCnt, itemData):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), "ItemID":itemID, "ItemCnt":itemCnt}  | 
|       | 
|     dataDict.update(itemData)  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack(recordName, dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ²É¼¯ÌØÊâNPC  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param npcID: npcID  | 
| #  @return: None  | 
| def DR_CollectNPCOK(curPlayer, npcID, giveMoney, giveExp, giveZhenQi, giveItemList):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(), 'GiveMoney':giveMoney,   | 
|                 'GiveExp':giveExp, 'GiveZhenQi':giveZhenQi, 'GiveItemList':str(giveItemList),  | 
|                 'NPCID':npcID}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("CollectNPCOK", dataDict, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## ÁìȡͶ×ʻر¨  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def DR_GetGoldInvestReward(curPlayer, investType, rewardIndex, itemList):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(), 'InvestType':investType,   | 
|                 'RewardIndex':rewardIndex,  | 
|                  'itemList':itemList}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("GetGoldInvestReward", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## »÷ɱNPCÁ÷Ïò  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param eventName:   | 
| #  @param npcID: npcID  | 
| #  @return: None  | 
| def DR_KillNPC(curPlayer, eventName, npcID, extendDict={}):  | 
|     mapID = GameWorld.GetMap().GetMapID()  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(), 'MapID':mapID, 'NPCID':npcID}  | 
|       | 
|     dataDict.update(extendDict)  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("KillNPC_%s" % eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_TreasureResult(curPlayer, actionType, successCnt, extendDict={}):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(),  | 
|                 "ActionType":actionType, "successCnt":successCnt}  | 
|       | 
|     dataDict.update(extendDict)  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("TreasureResult", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼ÒÌá½»bug¼°½¨Òé  | 
| def DR_BugSuggest(curPlayer, eventName, content):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'content':content}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerSubmit_%s" % eventName, dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## ×ÊÔ´ÕһؼǼ  | 
| #  @param curPlayer  | 
| #  @return: None  | 
| def DR_PlayerRecover(curPlayer, recoverWay, recoverCntDict, totalExp, totalMoney, totalSP, totalItemDict):  | 
|       | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'recoverWay':recoverWay, 'recoverCntDict':recoverCntDict,  | 
|                 'totalExp':totalExp, 'totalMoney':totalMoney, 'totalSP':totalSP, 'totalItemDict':totalItemDict}  | 
|   | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("PlayerRecover", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_GlobalDropCD(curPlayer, npcID, itemID):  | 
|     # È«¾ÖµôÂäCDµôÂä¼Ç¼  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(), 'NPCID':npcID, 'ItemID':itemID}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("GlobalDropCD", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_GlobalDropRate(curPlayer, npcID, itemID, killedCnt, dropRate):  | 
|     # È«¾Ö»÷ɱµôÂä¸ÅÂʵôÂä¼Ç¼  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'PlayerLV':curPlayer.GetLV(), 'NPCID':npcID,   | 
|                 'ItemID':itemID, 'KilledCnt':killedCnt, 'DropRate':dropRate}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("GlobalDropRate", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_MagicWeaponExp(curPlayer, mwID, succID, newExp, needExp):  | 
|     # ·¨±¦¼¤»î¾Ñé»ñµÃ¼Ç¼  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'mwID':mwID, 'succID':succID,   | 
|                 'newExp':newExp, 'needExp':needExp}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("MagicWeaponExp", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def DR_MagicWeaponActive(curPlayer, mwID, mwLV):  | 
|     # ·¨±¦µÈ¼¶Éý¼¶¼Ç¼  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), 'PlayerName':curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'mwID':mwID, 'mwLV':mwLV}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("MagicWeaponActive", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼ÒÉÏÏ߳ɾͼì²é  | 
| #  @return  | 
| def DR_CheckOldPlayerSuccess(curPlayer):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID()}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("CheckOldPlayerSuccess", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò¾³½çÉý¼¶  | 
| #  @return  | 
| def DR_RealmLVUp(curPlayer, realmlv):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(),   | 
|                 'AccID':curPlayer.GetAccID(), 'realmlv':realmlv,  | 
|                 'playerlv':curPlayer.GetLV(), 'power':curPlayer.GetFightPower()}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("RealmLVUp", dataDict, curPlayer)  | 
|     return  | 
|   | 
| def Cache_FightPowerChangeInfo(curPlayer, dotype, dataDict):  | 
|     ##ÔÝ´æ¿ÉÄܵ¼ÖÂÕ½Á¦½µµÍµÄÐÐΪÐÅÏ¢  | 
|     dataDict['dotime'] = str(datetime.datetime.today()).split(".")[0]  | 
|     eventName = ChConfig.FightPowerDownRecordDict.get(dotype, 'Unknown')  | 
|     if eventName in PyGameData.g_fightpowerChangeDataRecordDict:  | 
|         PyGameData.g_fightpowerChangeDataRecordDict[eventName].append(dataDict)  | 
|     else:  | 
|         PyGameData.g_fightpowerChangeDataRecordDict[eventName] = [dataDict]  | 
|     return  | 
|   | 
| def DR_FightPowerChangeInfo(curPlayer, beforePower):  | 
|     ##¼Ç¼սÁ¦½µµÍµÄÐÐΪÐÅÏ¢  | 
|     dataDict = {'beforePower':beforePower, 'PlayerID':curPlayer.GetPlayerID(), 'AccID':curPlayer.GetAccID()}  | 
|     for dotype, dateList in PyGameData.g_fightpowerChangeDataRecordDict.items():  | 
|         rList = []  | 
|         for dateInfo in dateList:  | 
|             dateTimeStr = dateInfo['dotime']  | 
|             if GameWorld.GetPastSeconds(dateTimeStr) >10:  | 
|                 continue  | 
|             rList.append(dateInfo)  | 
|         dataDict[dotype] = rList  | 
|     PyGameData.g_fightpowerChangeDataRecordDict = {}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("FightPowerChangeInfo", dataDict, curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼ÒÖÜ¿ñ»¶£¨ÆßÌìѲÀñ£©  | 
| #  @return  | 
| def DR_WeekPartyPoint(curPlayer, dayIndex, point):  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'AccID':curPlayer.GetAccID(), 'dayIndex':dayIndex, 'point':point}  | 
|       | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("WeekPartyPoint", dataDict, curPlayer)  | 
|     return  | 
| def DR_FeastWeekPartyPoint(curPlayer, dayIndex, point):  | 
|     ##½ÚÈÕѲÀñ  | 
|     dataDict = {'PlayerID':curPlayer.GetPlayerID(),   | 
|                 'AccID':curPlayer.GetAccID(), 'dayIndex':dayIndex, 'point':point}  | 
|     #·¢ËÍ·â°ü  | 
|     SendEventPack("FeastWeekPartyPoint", dataDict, curPlayer)  | 
|     return |