#!/usr/bin/python # -*- coding: GBK -*- # # ##@package UpdatePlayerName.py # # @todo:Íæ¼Ò¸ÄÃû # # @author jiang # @date 2013-01-23 13:30 # @version 1.5 # @note: # # @change: "2013-03-13 17:00" wdb ɾ³ý·â°ü # @change: "2014-05-22 10:20" xcc »Ö¸´¸ÄÃû¹¦ÄÜ # @change: "2014-12-23 03:40" Alee ¸ÄÃû×ÖµäÓÃÄÚ´ækey # @change: "2016-11-09 14:10" xdh Ð޸ĸÄÃûÏûºÄ # @change: "2017-07-04 20:10" xdh Íæ¼ÒºÏ·þÊ״εǼ¸ÄÃû´ÎÊýÖØÖÃΪ0 #------------------------------------------------------------------------------ #"""Version = 2017-07-04 20:10""" #------------------------------------------------------------------------------ # µ¼Èë import GameWorld import ChConfig import ReadChConfig import PlayerControl import IPY_GameWorld import ItemCommon import ChPyNetSendPack import NetPackCommon import EventReport #------------------------------------------------------------------------------ ## ºÏ·þÊ×µÇ def ResetChangeNameCnt(curPlayer): return #ÔÝÆÁ±Î GameWorld.DebugLog(' Íæ¼ÒºÏ·þÊ״εǼ ¸ÄÃû´ÎÊýÖØÖÃΪ0') PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_UpdatePlayerNameCnt, 0) Sync_UpdatePlayerNameCount(curPlayer) return #=============================================================================== #//A1 22 ½ÇÉ«¸ÄÃû #tagUpdatePlayerName # #struct tagUpdatePlayerName #{ # tagHead Head; # BYTE NewNameLen; # char NewName[NewNameLen]; # BYTE ItemIndex; //¸ÄÃûÎïÆ·ÔÚ±³°üÖеÄλÖà # DWORD ServerID; #}; #=============================================================================== ## Íæ¼Ò¸ü¸ÄÃû×Ö # @param index: Íæ¼ÒË÷Òý # @param clientData: ·â°ü½á¹¹Ìå # @param tick: ʱ¼ä´Á # @return: None def UpdatePlayerName(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if GameWorld.IsCrossServer(): #itemuse_lzxkoy_0:²»¿ÉÔÚ¿ç·þ»·¾³ÏÂʹÓøÄÃû¹¦ÄÜ¡£ PlayerControl.NotifyCode(curPlayer, "itemuse_lzxkoy_0") return if curPlayer.GetDictByKey(ChConfig.Def_Player_Dict_UpdatePlayerName): #ÕýÔÚ¸ÄÃûÖÐ GameWorld.Log("ÒѾ­ÔÚ¸ÄÃûÖÐ...", curPlayer.GetID()) return #ÐÂÃû×Ö newName = clientData.NewName itemIndex = clientData.ItemIndex - 1 #¿Í»§¶Ë·¢µÄĬÈÏ+ÁË1 serverID = clientData.ServerID if itemIndex == -1: #-1ÔòĬÈÏ¿ÛÇ®·ñÔò¿ÛµÀ¾ß return moneyType, moneyCount = GetCostMoney(curPlayer) if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyCount): #½ðÇ®²»×ã return False else: itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = itemPack.GetAt(itemIndex) if not __CheckItemUpdatePlayerName(curPlayer, curItem): #ÎïÆ·´íÎó return #¸ÄÃûÎïÆ·ÔÚ±³°üµÄλÖÃ, ÒòΪ±³°üÎïÆ·Ë÷Òý´Ó0¿ªÊ¼, ×Öµä×îСֵֻÄÜ0, ËùÒÔ´Ë´ÎË÷Òý+1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UpdatePlayerNameItemIndex, itemIndex + 1) #ÉèÖÃÕýÔÚ¸ÄÃûÖÐ... curPlayer.SetDict(ChConfig.Def_Player_Dict_UpdatePlayerName, 1) #֪ͨGameServerÕýʽ¸ÄÃû newNameMsg = str([newName, serverID]) GameWorld.Log("UpdatePlayerName ֪ͨGameServerÕýʽ¸ÄÃûΪ:%s"%newNameMsg, curPlayer.GetID()) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_UpdatePlayerName, 0, '', newNameMsg, len(newNameMsg)) return True ## ÑéÖ¤ÎïÆ·ÊÇ·ñΪ¸ÄÃûÌù # @param curPlayer Íæ¼ÒʵÀý # @param curItem ¸ÄÃûÌù # @return ÊÇ·ñΪ¸ÄÃûÌù def __CheckItemUpdatePlayerName(curPlayer, curItem): if not ItemCommon.CheckItemCanUse(curItem): return False return (curItem.GetType() == ChConfig.Def_ItemType_ChangePlayerName) ## »ñÈ¡½ðÇ®ÏûºÄ # @param curPlayer: Íæ¼ÒʵÀý # @return: ½ðÇ®ÀàÐÍ, ½ðÇ®ÊýÁ¿ def GetCostMoney(curPlayer): #¸ÄÃû´ÎÊý(¹«Ê½²ÎÊý) updatePlayerNameCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_UpdatePlayerNameCnt) moneyType, moneyCount = ReadChConfig.GetEvalChConfig("UpdatePlayerNameMoney") return moneyType, eval(moneyCount) #=============================================================================== #//01 17 ½ÇÉ«Ãûͬ²½#tagMUpdatePlayerName #tagMUpdatePlayerName * GettagMUpdatePlayerName(); # #class IPY_MUpdatePlayerName #{ #public: # # # unsigned char GetNewNameLen(); # # std::string GetNewName(); #}; #=============================================================================== ## ÊÕµ½GameServer֪ͨ¸ÄÃû # @param index: Íæ¼ÒË÷Òý # @param tick: ʱ¼ä´Á # @return def GameServer_UpdatePlayerName(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) curPlayerName = curPlayer.GetName() sendPack = IPY_GameWorld.IPY_MUpdatePlayerName() newName = sendPack.GetNewName() curPlayer.SetPlayerName(newName) GameWorld.GetPlayerManager().UpdatePlayerNameIndex(curPlayerName, newName) GameWorld.GetMapCopyPlayerManager().UpdatePlayerNameIndex(curPlayerName, newName) #EventReport.WriteEvent_change_name(curPlayer, curPlayerName, newName) GameWorld.Log("UpdatePlayerName MapServer¸ÄÃû³É¹¦, newName = %s"%newName, curPlayer.GetID()) #֪ͨGameServer½á¹û curPlayer.UpdatePlayerNameResult(True) return True ## ¿Û³ý¸ÄÃûÏûºÄ # @param curPlayer: Íæ¼ÒʵÀý # @return: None def PayUpdatePlayerNameCost(curPlayer): itemIndex = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_UpdatePlayerNameItemIndex) - 1 if itemIndex == -1: #-1ÔòĬÈÏ¿ÛÇ®·ñÔò¿ÛµÀ¾ß #¿Û³ýÏûºÄ moneyType, moneyCount = GetCostMoney(curPlayer) PlayerControl.PayMoney(curPlayer, moneyType, moneyCount, ChConfig.Def_Cost_Rename) else: #¿Û³ýÎïÆ· itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) curItem = itemPack.GetAt(itemIndex) if curItem: ItemCommon.DelItem(curPlayer, curItem, 1, True, 'UpdatePlayerName') #¸ÄÃû´ÎÊý+1 #updatePlayerNameCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_UpdatePlayerNameCnt) #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_UpdatePlayerNameCnt, updatePlayerNameCnt + 1) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UpdatePlayerNameItemIndex, 0) return ## ֪ͨ¸ÄÃû´ÎÊý # @param curPlayer: Íæ¼ÒʵÀý # @return: None def Sync_UpdatePlayerNameCount(curPlayer): return updatePlayerNameCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_UpdatePlayerNameCnt) pack = ChPyNetSendPack.tagUpdatePlayerNameCount() pack.Clear() pack.Count = updatePlayerNameCnt NetPackCommon.SendFakePack(curPlayer, pack) return