hxp
2025-06-03 4cdd576855c6e22d986ece4b18f7c80d82cefe38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#!/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
import ItemControler
#------------------------------------------------------------------------------ 
 
## ºÏ·þÊ×µÇ
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 not __CheckItemUpdatePlayerName(curPlayer, curItem):
            # ÎïÆ·¿ÉÄÜÒѾ­±ä¸ü£¬²»ÊǸÄÃûµÀ¾ßÁË»òΪ¿Õ£¬ÖØÐÂÕÒÒ»±é
            curItem = ItemControler.FindPlayerItemByType(curPlayer, IPY_GameWorld.rptItem, ChConfig.Def_ItemType_ChangePlayerName)
        if ItemCommon.CheckItemCanUse(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