From a7cda2ada3349bce6a6f9261752c0a2fe5e6927b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 15 十月 2025 19:26:45 +0800
Subject: [PATCH] 263 【主界面】头像系统(内政-幻境阁系统)-服务端(玩家改名)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 116 +++++++++-------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py | 20 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py | 224 +++++++------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/ServerScript.ini | 14 --
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 6
7 files changed, 140 insertions(+), 244 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 4ddee20..8b1c571 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3315,11 +3315,7 @@
Def_Player_Dict_HasVIPClubNote = 'HasVIPClubNote_186' # 是否提示过vip升级可加入贵宾俱乐部信息
Def_Player_Dict_PyPlayerAction = 'PyPlayerAction_187' # py自定义玩家状态
Def_Player_Dict_FamilyLV = 'FamilyLV_189' # 玩家帮会等级
-Def_Player_UpdatePlayerNameCnt = "UpdatePlayerNameCnt_196" # 角色改名次数
-Def_Player_Dict_UpdatePlayerNameItemIndex = "UpdatePlayerNameItemIndex_198" # 改名物品在背包的位置
-Def_Player_Dict_UpdatePlayerName = "UpdatePlayerName_199" # 改名锁
-Def_Player_Dict_UpdateFamilyNameItemIndex = "UpdateFamilyNameItemIndex" # 改名物品在背包的位置
-Def_Player_Dict_UpdateFamilyName = "UpdateFamilyName" # 改名锁
+Def_Player_Rename = "Rename" # 是否已改名过
Def_Player_Dict_FamilyZhenbaogeCut = "FamilyZhenbaogeCut" #珍宝阁今日是否已砍过价
Def_Player_Dict_FamilyZhenbaogeBuy = "FamilyZhenbaogeBuy" #珍宝阁今日是否已购买过
Def_Player_Dict_FamilyDonateCnt = "FamilyDonateCnt_%s" # 仙盟今日捐献次数,参数(捐献类型)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 465a0be..2654c9c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -19721,6 +19721,70 @@
#------------------------------------------------------
+# A9 21 角色改名结果 #tagSCRenameResult
+
+class tagSCRenameResult(Structure):
+ Head = tagHead()
+ PlayerName = "" #(char PlayerName[33])//size = 14
+ Result = 0 #(BYTE Result)//角色改名结果
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA9
+ self.Head.SubCmd = 0x21
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA9
+ self.Head.SubCmd = 0x21
+ self.PlayerName = ""
+ self.Result = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 33
+ length += 1
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 33, self.PlayerName)
+ data = CommFunc.WriteBYTE(data, self.Result)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerName:%s,
+ Result:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerName,
+ self.Result
+ )
+ return DumpString
+
+
+m_NAtagSCRenameResult=tagSCRenameResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCRenameResult.Head.Cmd,m_NAtagSCRenameResult.Head.SubCmd))] = m_NAtagSCRenameResult
+
+
+#------------------------------------------------------
# A9 06 商城全服购买次数通知 #tagGCStoreServerBuyCntInfo
class tagGCStoreServerBuyCnt(Structure):
@@ -19826,58 +19890,6 @@
m_NAtagGCStoreServerBuyCntInfo=tagGCStoreServerBuyCntInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCStoreServerBuyCntInfo.Head.Cmd,m_NAtagGCStoreServerBuyCntInfo.Head.SubCmd))] = m_NAtagGCStoreServerBuyCntInfo
-
-
-#------------------------------------------------------
-#A9 21 角色改名结果 #tagUpdatePlayerNameResult
-
-class tagUpdatePlayerNameResult(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("Result", c_ubyte), #角色改名结果
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xA9
- self.SubCmd = 0x21
- return
-
- def ReadData(self, stringData, _pos=0, _len=0):
- self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
-
- def Clear(self):
- self.Cmd = 0xA9
- self.SubCmd = 0x21
- self.Result = 0
- return
-
- def GetLength(self):
- return sizeof(tagUpdatePlayerNameResult)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''//A9 21 角色改名结果 //tagUpdatePlayerNameResult:
- Cmd:%s,
- SubCmd:%s,
- Result:%d
- '''\
- %(
- self.Cmd,
- self.SubCmd,
- self.Result
- )
- return DumpString
-
-
-m_NAtagUpdatePlayerNameResult=tagUpdatePlayerNameResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagUpdatePlayerNameResult.Cmd,m_NAtagUpdatePlayerNameResult.SubCmd))] = m_NAtagUpdatePlayerNameResult
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index da96c9a..42629f2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -126,6 +126,7 @@
import PlayerActTask
import PlayerMail
import DBDataMgr
+import UpdatePlayerName
import GameServerRefresh
import IPY_ServerDefine
import CommFunc
@@ -751,6 +752,7 @@
PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
PlayerTalk.OnPlayerLogin(curPlayer)
SyncADCntInfo(curPlayer)
+ UpdatePlayerName.OnPlayerLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
index 67ca5a6..f674bed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py
@@ -64,6 +64,26 @@
return
+def UpdatePlayerBillboardName(curPlayer):
+ ## 更新排行榜中的玩家名字记录
+
+ playerID = curPlayer.GetPlayerID()
+ updName = curPlayer.GetPlayerName()
+ billboardMgr = DBDataMgr.GetBillboardMgr()
+ for billboardType in ShareDefine.BillboardTypeList:
+ if billboardType in ShareDefine.FamilyBillboardList:
+ continue
+ groupList = billboardMgr.GetBillboardGroupList(billboardType)
+ for billboardType, groupValue1, groupValue2 in groupList:
+ billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
+ billData = billboardObj.FindByID(playerID)
+ if not billData:
+ continue
+ billData.SetName1(updName)
+
+ # 跨服榜更新, 待处理
+ return
+
def UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate=False, isCheckRule=True):
##更新玩家总战斗力
#
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py
index 9db01ba..9f6683b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/UpdatePlayerName.py
@@ -1,198 +1,78 @@
#!/usr/bin/python
# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
#
+##@package Player.UpdatePlayerName
#
-##@package UpdatePlayerName.py
+# @todo:改名
+# @author hxp
+# @date 2025-10-15
+# @version 1.0
#
-# @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
-#------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+#"""Version = 2025-10-15 19:30"""
+#-------------------------------------------------------------------------------
-## 合服首登
-def ResetChangeNameCnt(curPlayer):
- return #暂屏蔽
- GameWorld.DebugLog(' 玩家合服首次登录 改名次数重置为0')
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_UpdatePlayerNameCnt, 0)
- Sync_UpdatePlayerNameCount(curPlayer)
+import ChConfig
+import GameWorld
+import PlayerControl
+import ChPyNetSendPack
+import PlayerBillboard
+import NetPackCommon
+import IpyGameDataPY
+import PlayerFamily
+import ObjPool
+
+def OnPlayerLogin(curPlayer):
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Rename):
+ Sync_UpdatePlayerNameCount(curPlayer)
return
-#===============================================================================
#//A1 22 角色改名 #tagUpdatePlayerName
#
-#struct tagUpdatePlayerName
+#struct tagUpdatePlayerName
#{
# tagHead Head;
-# BYTE NewNameLen;
+# BYTE NewNameLen;
# char NewName[NewNameLen];
-# BYTE ItemIndex; //改名物品在背包中的位置
-# DWORD ServerID;
+# 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):
- #物品错误
+
+ renameState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Rename)
+ if renameState:
+ moneyType, moneyCount = IpyGameDataPY.GetFuncEvalCfg("PlayerRename", 1)
+ if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCount, "Rename"):
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)
+ oldName = curPlayer.GetName()
+ curPlayer.SetPlayerName(newName)
+ GameWorld.GetPlayerManager().UpdatePlayerNameIndex(oldName, newName)
+ GameWorld.GetMapCopyPlayerManager().UpdatePlayerNameIndex(oldName, newName)
+
+ #改名结果
+ clientPack = ChPyNetSendPack.tagSCRenameResult()
+ clientPack.PlayerName = curPlayer.GetPlayerName()
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ if not renameState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Rename, 1)
+ Sync_UpdatePlayerNameCount(curPlayer)
+
+ #同步其他功能玩家名
+ PlayerFamily.RefreshFamilyMember(curPlayer)
+ PlayerBillboard.UpdatePlayerBillboardName(curPlayer)
+ #社交名待更新
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)
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagUpdatePlayerNameCount)
+ clientPack.Count = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Rename)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 35d1190..56276a1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -963,7 +963,7 @@
Def_UniversalGameRecType_LuckyCloudBuyNum, # 幸运云购购买号码记录 21
Def_UniversalGameRecType_LuckyCloudBuyLottery, # 幸运云购开奖记录 22
Def_UniversalGameRecType_CrossBattlefieldBuy, # 玩家购买的跨服战场 23
- Def_UniversalGameRecType_UpdatePlayerName, # 玩家改名正在改名中的信息24
+ Def_UniversalGameRecType_24,
Def_UniversalGameRecType_BossDropGoodItemInfo, # boss掉落好物品信息记录25
Def_UniversalGameRecType_26,
Def_UniversalGameRecType_27,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/ServerScript.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/ServerScript.ini
index be8b2a3..4dfbade 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/ServerScript.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/ServerScript.ini
@@ -88,20 +88,6 @@
PacketSubCMD_1=0x1
PacketCallFunc_1=GameServer_MergeRegisterResult
-
-;角色改名
-[UpdatePlayerName]
-ScriptName = Player\UpdatePlayerName
-Writer = jiang
-Releaser = jiang
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0x1
-PacketSubCMD_1=0x17
-PacketCallFunc_1=GameServer_UpdatePlayerName
-
-
;GameServerPy万能封包
[GameServerPyPack]
ScriptName = NetPackCommon.py
--
Gitblit v1.8.0