| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #  | 
| #  | 
| ##@package UpdatePlayerName.py  | 
| #  | 
| # @todo:Íæ¼Ò¸ÄÃû  | 
| #  | 
| # @author jiang  | 
| # @date 2013-01-23 13:30  | 
| # @version 1.4  | 
| # @note:  | 
| #  | 
| # @change: "2013-03-13 17:00" wdb É¾³ý·â°ü  | 
| # @change: "2014-05-22 10:20" xcc »Ö¸´¸ÄÃû¹¦ÄÜ  | 
| # @change: "2014-05-30 1:20" xmnathan ¸ÄÃûʱÐ޸ļÒ×åÄÚÃû³Æ  | 
| # @change: "2016-03-28 17:00" hxp ¸ÄÃûÈ«Ãû¸ñʽÅäÖà  | 
| #------------------------------------------------------------------------------   | 
| #"""Version = 2016-03-28 17:00"""  | 
| #------------------------------------------------------------------------------   | 
| # µ¼Èë  | 
| import GameWorld  | 
| import IPY_GameServer  | 
| import ChConfig  | 
| import ChPyNetSendPack  | 
| import NetPackCommon  | 
| import ShareDefine  | 
| import PlayerControl  | 
| import DirtyList  | 
| import DataRecordPack  | 
| import PlayerUniversalGameRec  | 
| import PlayerBillboard  | 
| import PlayerSocial  | 
| #------------------------------------------------------------------------------   | 
|   | 
| ## MapServerÇëÇóÍæ¼Ò¸ü¸ÄÃû×Ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param newNameMsg: ÐÂÃû×Ö  | 
| #  @param tick: Ê±¼ä´Á  | 
| #  @return: None  | 
| def MapServer_UpdatePlayerName(curPlayer, newNameMsg, tick):  | 
|     GameWorld.DebugLog("MapServer_UpdatePlayerName newNameMsg=%s" % newNameMsg)  | 
|     if __GetNameByUniversalGameRec(curPlayer):  | 
|         #¸ÄÃû½øÐÐÖÐ  | 
|         return  | 
|     newName, serverID = eval(newNameMsg)  | 
|     __UpdatePlayerName(curPlayer, newName, serverID, tick)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼Ò¸ü¸ÄÃû×Ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param newName: ÐÂÃû×Ö  | 
| #  @param tick: Ê±¼ä´Á  | 
| #  @return: None  | 
| def __UpdatePlayerName(curPlayer, newName, serverID, tick):  | 
|     curPlayerID = curPlayer.GetID()  | 
|     GameWorld.Log("UpdatePlayerName NewName = %s, serverID=%s " % (newName, serverID), curPlayerID)  | 
|       | 
|     #C++¹ýÂ˿ոñ  | 
|     newName = GameWorld.GetGameWorld().GetCharTrim(newName)  | 
|     if newName.strip() == "" or DirtyList.IsWordForbidden(newName):  | 
|         #Ãû×Ö²»ºÏ·¨  | 
|         UpdatePlayerNameResult(curPlayer, ShareDefine.Def_Rename_Result_Err)  | 
|         return False  | 
|       | 
|     playerNameLen = len(newName)  | 
|     if playerNameLen < ChConfig.Def_CreatRole_MinStr or playerNameLen > ChConfig.Def_CreatRole_MaxStr:  | 
|         #Ãû×Ö³¤¶È²»ÕýÈ·  | 
|         UpdatePlayerNameResult(curPlayer, ShareDefine.Def_Rename_Result_LenErr)  | 
|         return False  | 
|       | 
|     fullName = GameWorld.GetPlayerFullName(curPlayer, newName, serverID)  | 
|     if not fullName:  | 
|         #Ãû×Ö³¤¶È²»ÕýÈ·  | 
|         UpdatePlayerNameResult(curPlayer, ShareDefine.Def_Rename_Result_LenErr)  | 
|         return False  | 
|       | 
|     #¼Ç¼½ÇÉ«¸ÄÃûÐÅÏ¢[ÐÂÃû×Ö, ¾ÉÃû×Ö, Íæ¼ÒID, serverID]  | 
|     #noteInfoList = [newName, curPlayer.GetName(), curPlayerID, serverID] # ÕâÀï²»´æfullName  | 
|     PlayerUniversalGameRec.MapServer_UniversalGameRec(curPlayer, ShareDefine.Def_UniversalGameRecType_UpdatePlayerName,   | 
|                                                       [curPlayerID, serverID], [newName, curPlayer.GetName()])  | 
|       | 
|     #֪ͨdb½øÐд¦Àí  | 
|     curPlayer.SendToDbRenamePlayer(fullName)  | 
|     return  | 
|   | 
|   | 
| ## ÊÕµ½DB»ØÓ¦(GameServerScript.iniÀàÃû×¢²á½Å±¾)  | 
| #  @param index: Íæ¼ÒË÷Òý  | 
| #  @param tick: Ê±¼ä´Á  | 
| #  @return: ½á¹û  | 
| def OnRenamePlayerReply(index, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|       | 
|     result = curPlayer.GetRenamePlayerResult()  | 
|     newName = curPlayer.GetNewPlayerName()  | 
|       | 
|     GameWorld.Log("OnRenamePlayerReply Reply result = %s, newName = %s"%(result, newName), curPlayer.GetID())  | 
|       | 
|     if not (result and newName):  | 
|         #¸ÄÃûʧ°Ü»òÃû×ÖΪ¿Õ  | 
|         GameWorld.ErrLog("UpdatePlayerName NewName repeat, db Reply result = %s, newName = %s"%\  | 
|                          (result, newName), curPlayer.GetID())  | 
|         #֪ͨ¸ÄÃû½á¹û  | 
|         UpdatePlayerNameResult(curPlayer, ShareDefine.Def_Rename_Result_Repeat)  | 
|         return False  | 
|       | 
|     #֪ͨMapServer½øÐиÄÃû´¦Àí  | 
|     curPlayer.SynMapServerPlayerName(newName)  | 
|     return True  | 
|       | 
|       | 
| #===============================================================================  | 
| # //01 17ͬ²½½ÇÉ«Ãû½á¹û#tagGUpdatePlayerNameResult  | 
| #   | 
| # struct    tagGUpdatePlayerNameResult  | 
| # {  | 
| #    tagHead    Head;  | 
| #    BYTE    Result;  | 
| # }  | 
| #===============================================================================  | 
| ## ÊÕµ½MapServer·µ»Ø½á¹û  | 
| #  @param index: Íæ¼ÒË÷Òý  | 
| #  @param tick: Ê±¼ä´Á  | 
| #  @return: ½á¹û  | 
| def MapServer_UpdatePlayerNameResult(index, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|       | 
|     sendPack = IPY_GameServer.IPY_GUpdatePlayerNameResult()  | 
|     result = sendPack.GetResult()  | 
|       | 
|     GameWorld.Log("UpdatePlayerName, MapServer Reply result = %s"%result)  | 
|       | 
|     if not result:  | 
|         #MapServer·µ»Ø¸ÄÃûʧ°Ü֪ͨ¸ÄÃû½á¹û  | 
|         UpdatePlayerNameResult(curPlayer, ShareDefine.Def_Rename_Result_MapErr)  | 
|         return False  | 
|       | 
|     #¼Ç¼¾ÉÃû×Ö  | 
|     oldPlayerName = curPlayer.GetName()  | 
|       | 
|     #ÉèÖÃÐÂÃû×Ö  | 
|     newName = curPlayer.GetNewPlayerName()  | 
|     curPlayer.SetName(newName)  | 
|       | 
|     #»ñÈ¡ÐÂÃû×Ö  | 
|     playerName = curPlayer.GetName()      | 
|       | 
|     #֪ͨLoginServer  | 
|     curPlayer.SynLoginServerPlayerName(playerName)  | 
|       | 
|     #֪ͨRouteServer¸ÄÃû  | 
|     curPlayer.SynRouteServerPlayerName(playerName)  | 
|       | 
|     #¸ÄÃû³É¹¦  | 
|     UpdatePlayerNameResult(curPlayer, ShareDefine.Def_Rename_Result_Succeed)  | 
|       | 
|     #Á÷Ïò¼Ç¼  | 
|     DataRecordPack.DR_UpdatePlayerName(curPlayer, oldPlayerName)  | 
|       | 
|     #È«¼Ò×å֪ͨ  | 
|     familyID = curPlayer.GetFamilyID()  | 
|     if familyID:  | 
|         #jiazu_pan_243780 °ï»á³ÉÔ±%sÒѾ¸üÃûΪ%s.  | 
|         PlayerControl.FamilyNotify(familyID, 'jiazu_pan_243780', [oldPlayerName, newName])  | 
|     return True  | 
|   | 
|   | 
| ## »ñÈ¡¼Ç¼ÖеÄÃû×Ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def __GetNameByUniversalGameRec(curPlayer):  | 
|       | 
|     curPlayerID = curPlayer.GetID()  | 
|       | 
|     recTypeListData = PlayerUniversalGameRec.GetRecordList(ShareDefine.Def_UniversalGameRecType_UpdatePlayerName)  | 
|     for index in range(recTypeListData.Count()):  | 
|         universalRecData = recTypeListData.At(index)  | 
|           | 
|         if curPlayerID != universalRecData.GetValue1():  | 
|             #²»ÊÇÒª²éÕÒµÄÍæ¼Ò  | 
|             continue  | 
|           | 
|         return universalRecData  | 
|               | 
|     return None  | 
|   | 
|   | 
| ## É¾³ýͨÓñí¼Ç¼µÄ¸ÄÃûÐÅÏ¢  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def __DelUniversalGameRec(curPlayer):  | 
|     curPlayerID = curPlayer.GetID()  | 
|     recTypeListData = PlayerUniversalGameRec.GetRecordList(ShareDefine.Def_UniversalGameRecType_UpdatePlayerName)  | 
|     for index in range(recTypeListData.Count()):  | 
|         universalRecData = recTypeListData.At(index)  | 
|         if curPlayerID != universalRecData.GetValue1():  | 
|             #²»ÊÇÒª²éÕÒµÄÍæ¼Ò  | 
|             continue  | 
|           | 
|         recTypeListData.Delete(index)  | 
|         return  | 
|     return  | 
|       | 
|       | 
| ## ¸ÄÃû½á¹û  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param result: ½á¹û  | 
| #  @return: None  | 
| def UpdatePlayerNameResult(curPlayer, result):  | 
|       | 
|     #֪ͨMapServer½â³ý¸ÄÃûËø  | 
|     curPlayerID = curPlayer.GetID()  | 
|     GameWorld.GetPlayerManager().MapServer_QueryPlayer(curPlayerID, 0, curPlayerID, curPlayer.GetMapID(),   | 
|                  'ChearUpdatePlayerName', '%s'%(result), len(str(result)))  | 
|       | 
|     #¸ÄÃû³É¹¦  | 
|     if result == ShareDefine.Def_Rename_Result_Succeed:  | 
|         #¾ÀÕýÅÅÐаñÖеÄÍæ¼ÒÃû×ּǼ  | 
|         PlayerBillboard.RedressBillboard(curPlayer)  | 
|       | 
|         #¾ÀÕýͨÓüǼ±íÖеÄÍæ¼ÒÃû×Ö  | 
|         RedressUniversalGameRec(curPlayer)  | 
|           | 
|         #¾ÀÕý¼Ò×åÐÐΪ¼Ç¼  | 
|         RedressFamilyAction(curPlayer)  | 
|           | 
|         #Ð޸ļÒ×åÐÅÏ¢  | 
|         RedressFamily(curPlayer)  | 
|           | 
|         #¾ÀÕýÉç½»ÖÐÍæ¼ÒÃû×Ö  | 
|         PlayerSocial.UpdateSocialInfo(curPlayer.GetID(), IPY_GameServer.CDBPlayerRefresh_PlayerName, curPlayer.GetName())  | 
|           | 
|     #ɾ³ýͨÓñí¼Ç¼µÄ¸ÄÃûÐÅÏ¢  | 
|     #@warning: ±ØÐëÔÚ¾ÀÕýÅÅÐкó, ÒòΪ¾ÀÕý³èÎïÅÅÐаñÓÐÓõ½Íæ¼Ò¸ÄÃûǰµÄ¾ÉÃû×Ö  | 
|     __DelUniversalGameRec(curPlayer)  | 
|       | 
|     #֪ͨ¿Í»§¶Ë¸ÄÃû½á¹û  | 
|     Sync_UpdatePlayerNameResult(curPlayer, result)  | 
|     return  | 
|   | 
|   | 
| #===============================================================================  | 
| # //A9 21 ½ÇÉ«¸ÄÃû½á¹û #tagUpdatePlayerNameResult  | 
| #   | 
| # struct    tagUpdatePlayerNameResult  | 
| # {  | 
| #    tagHead        Head;  | 
| #    BYTE        Result;        //½ÇÉ«¸ÄÃû½á¹û  | 
| # };  | 
| #===============================================================================  | 
| ## Í¨Öª½ÇÉ«¸ÄÃû½á¹û  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param result: ½á¹û  | 
| #  @return: None  | 
| def Sync_UpdatePlayerNameResult(curPlayer, result):  | 
|     pack = ChPyNetSendPack.tagUpdatePlayerNameResult()  | 
|     pack.Clear()  | 
|     pack.Result = result  | 
|     NetPackCommon.SendFakePack(curPlayer, pack)  | 
|     return  | 
|   | 
|   | 
| ## ¾ÀÕýͨÓÃÐÅÏ¢±íÖÐÍæ¼ÒÃû×Ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def RedressUniversalGameRec(curPlayer):  | 
|       | 
|     redressGameRecTypeList = (  | 
|                               ShareDefine.Def_UniversalGameRecType_HijackTruck,    # ½ÙïÚ1  | 
|                               )  | 
|       | 
|     curPlayerName = curPlayer.GetName()  | 
|     gameRecData = __GetNameByUniversalGameRec(curPlayer)  | 
|     if not gameRecData:  | 
|         return  | 
|       | 
|     oldName = gameRecData.GetStrValue2()  | 
|       | 
|     universalRecMgr = GameWorld.GetUniversalRecMgr()    | 
|     for index in redressGameRecTypeList:  | 
|         recTypeListData = universalRecMgr.GetTypeList(index)  | 
|         recCount = recTypeListData.Count()  | 
|         for index in range(0, recCount):  | 
|             universalRecData = recTypeListData.At(index)  | 
|               | 
|             if oldName == universalRecData.GetStrValue1():  | 
|                 universalRecData.SetStrValue1(curPlayerName)  | 
|               | 
|             if ShareDefine.Def_UniversalGameRecType_HijackTruck and oldName == universalRecData.GetStrValue2():  | 
|                 #½ÙïڼǼÖÐ, ×Ö¶Î2Ϊ½ÙïÚÕßÃû×Ö  | 
|                 universalRecData.SetStrValue2(curPlayerName)  | 
|     return  | 
|   | 
| #------------------------------------------------------------------------------   | 
| ## ¾ÀÕý¼Ò×åÐÐΪ¼Ç¼ÖеÄÍæ¼ÒÃû×Ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def RedressFamilyAction(curPlayer):  | 
|       | 
|     familyId = curPlayer.GetFamilyID()  | 
|     if not familyId:  | 
|         #¸ÄÍæ¼ÒûÓмÒ×å  | 
|         return  | 
|       | 
|     gameRecData = __GetNameByUniversalGameRec(curPlayer)  | 
|     if not gameRecData:  | 
|         return  | 
|       | 
|     curPlayerName = curPlayer.GetName()  | 
|     oldName = gameRecData.GetStrValue2()  | 
|       | 
|     allFamilyActionManager = GameWorld.GetFamilyActionManager()    | 
|       | 
|     for actionType in ShareDefine.Def_ActionTypeList:  | 
|         familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType)  | 
|         for index in range(0, familyAction.Count()):  | 
|             familyActionData = familyAction.At(index)  | 
|             name = familyActionData.GetName()  | 
|             if name != oldName:  | 
|                 continue  | 
|             familyActionData.SetName(curPlayerName)  # ÉèÖÃÃû×Ö  | 
|               | 
|     return  | 
|   | 
| ## ¾ÀÕý¼Ò×åÖеÄÍæ¼ÒÃû×Ö  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @return: None  | 
| def RedressFamily(curPlayer):  | 
|     familyId = curPlayer.GetFamilyID()  | 
|     if not familyId:  | 
|         #Íæ¼ÒûÓмÒ×å  | 
|         return  | 
|     curFamily = curPlayer.GetFamily()  | 
|     #¼Ò×峤Ãû×Ö  | 
|     if curFamily.GetLeaderID() == curPlayer.GetID():  | 
|         curFamily.SetLeaderName(curPlayer.GetName())  | 
|     #¼Ò×å³ÉÔ±Ãû×Ö  | 
|     curMember = curFamily.FindMember(curPlayer.GetID())  | 
|     if curMember:  | 
|         curMember.SetName(curPlayer.GetName())  | 
|     return  | 
|   | 
| #------------------------------------------------------------------------------   | 
| ## Íæ¼ÒÉÏÏß¾ÀÕýÃû×ÖÐ޸Ľá¹û  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param tick: Ê±¼ä´Á  | 
| #  @return: None  | 
| def PlayerLoadMapRedressUpdatePlayerName(curPlayer, tick):  | 
|     gameRecData = __GetNameByUniversalGameRec(curPlayer)  | 
|     if not gameRecData:  | 
|         return  | 
|       | 
|     newName = gameRecData.GetStrValue1()  | 
|     serverID = gameRecData.GetValue2()  | 
|       | 
|     #¾ÀÕýÒì³£, ÖØÐ¾ÀÕý  | 
|     GameWorld.Log("RedressUpdatePlayerName Err Afresh Redress, curPlayerName = %s, newName = %s"%\  | 
|                   (curPlayer.GetName(), newName), curPlayer.GetID())  | 
|       | 
|     __UpdatePlayerName(curPlayer, newName, serverID, tick)  | 
|     return  |