#!/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
|