From 6343277477b190efbc389bab2706cf94eb09be8d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 二月 2026 20:59:32 +0800
Subject: [PATCH] 358 【内政】红颜系统-服务端(红颜时装默认解锁的状态也通知;红颜时装物品解锁改为直接取背包中的物品;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 230 +++++++++++++++++++++++----------------------------------
1 files changed, 93 insertions(+), 137 deletions(-)
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 a523967..2110b27 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -29,7 +29,6 @@
import FunctionNPCCommon
import PlayerGMOper
import ReadChConfig
-import PetControl
import OperControlManager
import ShareDefine
import NetPackCommon
@@ -39,7 +38,6 @@
import PlayerLVAward
import PlayerGoldGift
import PlayerSignDay
-import PlayerPet
import PlayerPrestigeSys
import PlayerFamily
import PlayerLoginDayAward
@@ -49,53 +47,38 @@
import PlayerWishingWell
import PlayerSuccess
import PlayerFreeGoods
-import PlayerCrossRealmPK
-import PlayerCrossChampionship
import GameFuncComm
import PlayerFamilyTaofa
-import PlayerWeekParty
-import PlayerFeastWeekParty
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActLogin
import PlayerTreasure
-import PlayerRune
import IpyGameDataPY
import EventReport
import PassiveBuffEffMng
import PlayerFlashSale
import PlayerFlashGiftbag
import PlayerDailyGiftbag
-import PlayerCostRebate
import PlayerActBuyOne
import PlayerActGrowupBuy
import PlayerActCollectWords
import PlayerActTotalRecharge
-import PlayerActRechargePrize
import PlayerActLianqi
import PlayerActGodGift
import PlayerActFamilyCTGAssist
-import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerSpringSale
-import PlayerCrossYaomoBoss
-import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
-import CrossActCTGBillboard
-import CrossActAllRecharge
import PlayerFuncSysPrivilege
import PlayerActTurntable
-import PlayerTongTianLing
import OpenServerActivity
-import CrossRealmPlayer
import ChNetSendPack
import PlayerArena
import PyGameData
import PlayerCoin
import PlayerCharm
import PlayerDogz
-import PlayerCoat
import PlayerFB
import PlayerFaQi
import SkillShell
@@ -258,11 +241,6 @@
PlayerState.Sync_PKBossState(curPlayer)
- if PlayerControl.GetCrossMapID(curPlayer):
- CrossRealmPlayer.DoExitCrossRealm(curPlayer)
-
- PetControl.DoLogic_PetLoadMapOK(curPlayer)
-
# 恢复视野,刷新自己的视野
curPlayer.SetVisible(True)
PlayerControl.SetSight(curPlayer, 0)
@@ -422,6 +400,7 @@
Sync_OpenServerDay(curPlayer)
#通知玩家基本信息
curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer
+ SyncSettingData(curPlayer)
# 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
# !!!必要发送的数据要注意位置
@@ -457,8 +436,6 @@
DataRecordPack.DR_PlayerLogin(curPlayer)
EventReport.WriteEvent_login(curPlayer)
- #---玩家上线, 宠物逻辑处理---
- #PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
return
leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer)
@@ -514,10 +491,6 @@
#PK模式
#SyncPKModel(curPlayer)
- #---玩家上线, 宠物逻辑处理---
- #PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
- #PlayerPet.OnPlayerPetLogin(curPlayer)
-
# 通知等级奖励领取记录
PlayerLVAward.Sync_LVAwardGetRecordInfo(curPlayer)
@@ -568,16 +541,6 @@
PlayerFamily.OnPlayerLogin(curPlayer, tick)
- # 时装
- PlayerCoat.OnLogin_Coat(curPlayer)
-
- # 跨服PK
- PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
- PlayerCrossChampionship.DoPlayerLogin(curPlayer)
-
- # 幸运云购
- PlayerLuckyCloudBuy.OnPlayerLogin(curPlayer)
-
# 竞技场
PlayerArena.OnLogin(curPlayer)
@@ -586,19 +549,8 @@
PlayerControl.NotifyUseMoneyTotal(curPlayer)
#通知基础属性
#NotifyPlayerBasePoint(curPlayer)
-
- #跨服充值排行
- CrossActCTGBillboard.OnPlayerLogin(curPlayer)
- #跨服全民充值
- CrossActAllRecharge.OnPlayerLogin(curPlayer)
- #消费返利
- PlayerCostRebate.OnPlayerLogin(curPlayer)
#累计充值
PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
- #累计充值返利仙玉
- PlayerActRechargeRebateGold.OnPlayerLogin(curPlayer)
- #充值返利
- PlayerActRechargePrize.OnPlayerLogin(curPlayer)
#成长必买
PlayerActGrowupBuy.OnPlayerLogin(curPlayer)
#限时特惠
@@ -616,16 +568,12 @@
#集字活动
PlayerActCollectWords.OnPlayerLogin(curPlayer)
ChItem.Sync_ItemDayUseCnt(curPlayer)
- # 符印登录通知
- PlayerRune.PlayerRuneLogin(curPlayer)
# 商店物品购买次数登录通知
FunctionNPCCommon.ShopItemOnLogin(curPlayer)
# 通知设置的被动功法
#PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
# 极品白拿
PlayerFreeGoods.OnLogin(curPlayer)
- # 周狂欢活动
- PlayerWeekParty.OnLogin(curPlayer)
# 购买次数礼包活动
PlayerActBuyCountGift.OnPlayerLogin(curPlayer)
# 任务活动
@@ -636,8 +584,6 @@
PlayerActLunhuidian.OnPlayerLogin(curPlayer)
# 登录活动
PlayerActLoginNew.OnPlayerLogin(curPlayer)
- # 节日巡礼活动
- PlayerFeastWeekParty.OnLogin(curPlayer)
# 节日登录活动
PlayerFeastLogin.OnPlayerLogin(curPlayer)
# 节日祝福活动
@@ -669,8 +615,6 @@
PlayerFB.OnLogin(curPlayer)
#技能专精信息
#SkillShell.NotifyElementSkillInfo(curPlayer)
- #通天令
- PlayerTongTianLing.OnPlayerLogin(curPlayer)
#创角奖励
Sync_CreateRoleAwardInfo(curPlayer)
#自定义奖励
@@ -927,29 +871,34 @@
return
def S2C_OnlineState(dataMsg, fromServerID, playerID):
- ## 收到游戏服玩家在线状态同步
+ '''收到游戏服玩家在线状态同步
+ 跨服收到在线状态同步时都视为在跨服上线,需要处理跨服在线/上线的逻辑
+ 不然在跨服维护游戏服不维护的情况下,等跨服重开后,游戏服重新同步在线玩家,此时如果跨服不处理登录逻辑,会少同步封包
+ 如公会,跨服维护之后登录的玩家会取不到公会数据,等跨服重开后,需视为登录重新同步
+ 与跨服重连一样的道理,都是重新同步所有信息
+ '''
isOnline = dataMsg["isOnline"]
- isLoginout = dataMsg["isLoginout"]
+ #isLoginout = dataMsg["isLoginout"] # 如果个别跨服功能有需要对真实上下线做特殊处理的可使用该参数判断
baseInfo = dataMsg["baseInfo"]
crossPlayer = UpdCrossPlayerFromMainServer(fromServerID, playerID, baseInfo, isOnline)
# 其他跨服功能处理,暂时仅上下线时处理
curServerID = GameWorld.GetGameWorld().GetServerID()
- if isLoginout:
- # 公会
- if "crossFamilyServerID" in dataMsg:
- crossFamilyServerID = dataMsg["crossFamilyServerID"]
- if curServerID == crossFamilyServerID:
- if isOnline:
- PlayerFamily.OnCrossPlayerLogin(crossPlayer)
- else:
- PlayerFamily.OnCrossPlayerLogout(crossPlayer)
-
- # 最后处理缓存,先放在更新中处理删除,有问题再放后面
- #if not isOnline:
- # PlayerViewCache.OnCrossPlayerLogout(crossPlayer)
- # CrossPlayer.GetCrossPlayerMgr().DeletePlayer(playerID)
+ #if isLoginout:
+ # 公会
+ if "crossFamilyServerID" in dataMsg:
+ crossFamilyServerID = dataMsg["crossFamilyServerID"]
+ if curServerID == crossFamilyServerID:
+ if isOnline:
+ PlayerFamily.OnCrossPlayerLogin(crossPlayer)
+ else:
+ PlayerFamily.OnCrossPlayerLogout(crossPlayer)
+
+ # 最后处理缓存,先放在更新中处理删除,有问题再放后面
+ #if not isOnline:
+ # PlayerViewCache.OnCrossPlayerLogout(crossPlayer)
+ # CrossPlayer.GetCrossPlayerMgr().DeletePlayer(playerID)
# 最后同步处理跨服登录成功
#if isLoginout and isOnline:
@@ -1373,9 +1322,6 @@
# GameObj.SetHPFull(curSummon)
#===========================================================================
- #初始化宠物 通知客户端
- PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
-
#通知GameServer自己现在的地图
#curPlayer.Sync_GameServer_MapID()
@@ -1585,9 +1531,6 @@
#如果登录的副本,执行进入副本逻辑, 因为有时间响应, 必须在EndLoadMap之后...
FBLogic.DoEnterFBLogic(curPlayer, tick)
-
- #触发切换地图宠物逻辑
- PetControl.DoLogic_PetLoadMapOK(curPlayer)
#---检查是否卡障碍---
curMap = GameWorld.GetMap()
@@ -1989,20 +1932,6 @@
curPlayer.ChangePos(sendPack_DestX, sendPack_DestY)
#curPlayer.SetClientMoveTick(sendPack_WorldTick)
-
- fightPet = curPlayer.GetPetMgr().GetFightPet()
- #无出战宠物
- if fightPet == None:
- return
-
- if GameWorld.GetDist(fightPet.GetPosX(), fightPet.GetPosY(), sendPack_DestX, sendPack_DestY) <= 4:
- #战斗中不频繁移动
- return
-
- #出战宠物同时移动
- PetControl.FightPetFollowMove(curPlayer, sendPack_StartX, sendPack_StartY)
-
-
return
#---------------------------------------------------------------------
@@ -2076,9 +2005,6 @@
# 在UpdatePos 调用间隔内多次调用move会使 m_StartMoveTick 重置,导致无法移动
# 而在 CheckMovePos -> PlayerRefreshPos -> __FixPlayerPos -> ChangePos 造成移动的现象
curPlayer.Move(client_DestX, client_DestY)
-
- #出战宠物同时移动
- #PetControl.FightPetFollowMove(curPlayer, client_DestX, client_DestY, client_StartX, client_StartY)
return
##移动点检查, checkObj 是移动对象(在人镖合一状态下, 输入为骠车
@@ -2299,9 +2225,6 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_CrossRegisterMap, 0)
- #下线召回宠物
- PetControl.ReCallFightPet(curPlayer)
-
#离线session
EventReport.WriteEvent_session(curPlayer)
@@ -2343,6 +2266,76 @@
return
curPlayer.SetSetting(setting)
+ return
+
+#// A1 31 前端自定义保存设置内容 #tagCSSettingData
+#
+#struct tagCSSettingData
+#{
+# tagHead Head;
+# BYTE KeyNum; // 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
+# BYTE DataLen;
+# char SetData[DataLen]; //自定义保存的内容
+#};
+def OnSettingData(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+
+ keyNum = clientData.KeyNum
+ setData = clientData.SetData
+ setData = setData.replace(" ", "") # 去空格
+ keyStr = str(keyNum)
+
+ gameRecMgr = DBDataMgr.GetGameRecMgr()
+ preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_Setting, playerID)
+ recData = preSetRecMgr.GetOneRecData(True)
+ if not recData:
+ return
+ dataDict = recData.GetUserDict()
+
+ if not setData:
+ dataDict.pop(keyStr, None)
+ else:
+ keyMax = 100
+ if keyStr not in dataDict:
+ if len(dataDict) >= keyMax:
+ GameWorld.ErrLog("存储个数达到上限! keyMax=%s" % keyMax)
+ return
+ dataDict[keyStr] = setData
+
+ SyncSettingData(curPlayer, keyStr)
+ return
+
+def SyncSettingData(curPlayer, keyStr=""):
+ playerID = curPlayer.GetPlayerID()
+ gameRecMgr = DBDataMgr.GetGameRecMgr()
+ preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_Setting, playerID)
+ recData = preSetRecMgr.GetOneRecData()
+ if not recData:
+ return
+ dataDict = recData.GetUserDict()
+
+ settingDataList = []
+ syncKeyList = [keyStr] if keyStr else dataDict.keys()
+ for keyStr in syncKeyList:
+ if keyStr in dataDict:
+ setData = dataDict[keyStr]
+ else:
+ setData = ""
+ keyNum = GameWorld.ToIntDef(keyStr, None)
+ if keyNum == None:
+ continue
+ sData = ChPyNetSendPack.tagSCSettingData()
+ sData.KeyNum = keyNum
+ sData.SetData = setData
+ sData.DataLen = len(sData.SetData)
+ settingDataList.append(sData)
+ if not settingDataList:
+ return
+ clientPack = ChPyNetSendPack.tagSCSettingDataInfo()
+ clientPack.SettingDataList = settingDataList
+ clientPack.DataCnt = len(clientPack.SettingDataList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
return
#// A2 29 设置小助手 #tagCMSetLittleHelper
@@ -2953,8 +2946,6 @@
elif rebornType == ChConfig.rebornType_MainCity:
#直接取db中配置的复活点
PlayerControl.PlayerResetWorldPos(curPlayer, gameMap.GetRebornMapID(), gameMap.GetRebornMapX(), gameMap.GetRebornMapY())
- #重新召唤宠物
- PlayerPet.AutoSummonPet(curPlayer)
#复活成功,重置状态
PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
@@ -3014,8 +3005,7 @@
# WORD LineID;
#};
def OnEnterCrossServer(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID, clientData.LineID)
+ #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
return
#===============================================================================
@@ -3423,9 +3413,6 @@
# 领取极品白拿
elif rewardType == ChConfig.Def_RewardType_FreeGoods:
PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
- # 领取消费返利奖励
- elif rewardType == ChConfig.Def_RewardType_CostRebate:
- PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx, dataExStr)
# 领取累计充值奖励
elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
PlayerActTotalRecharge.OnGetTotalRechargeAward(curPlayer, dataEx, dataExStr)
@@ -3438,21 +3425,9 @@
# 领取许愿池奖励
elif rewardType == ChConfig.Def_RewardType_WishingWell:
PlayerWishingWell.DoGetWishingAward(curPlayer)
- # 领取周狂欢活动奖励
- elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
- PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
- # 领取周狂欢积分奖励
- elif rewardType == ChConfig.Def_RewardType_WeekPartyPoint:
- PlayerWeekParty.GetWeekPartyPointAward(curPlayer, dataEx, dataExStr)
# 领取登录奖励活动奖励
elif rewardType == ChConfig.Def_RewardType_ActLoginAwardAct:
PlayerActLogin.GetLoginAwardActionAward(curPlayer, dataEx, dataExStr)
- # 领取节日巡礼活动奖励
- elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyAct:
- PlayerFeastWeekParty.GetFeastWeekPartyActionAward(curPlayer, dataEx, dataExStr)
- # 领取节日巡礼积分奖励
- elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
- PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
# 领取节日登录奖励
elif rewardType == ChConfig.Def_RewardType_FeastLogin:
PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
@@ -3465,15 +3440,6 @@
# 领取任务活动奖励
elif rewardType == ChConfig.Def_RewardType_ActTask:
PlayerActTask.OnGetActTaskAward(curPlayer, dataEx, dataExStr)
- # 领取跨服充值排行活动达标奖励
- elif rewardType == ChConfig.Def_RewardType_CACTGBillboardDabiao:
- CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
- # 跨服全民充值奖励
- elif rewardType == ChConfig.Def_RewardType_CAAllRecharge:
- CrossActAllRecharge.GetCrossActAllRechargeAward(curPlayer, dataEx)
- # 跨服妖魔boss伤害奖励
- elif rewardType == ChConfig.Def_RewardType_CrossYaomoBossHurt:
- PlayerCrossYaomoBoss.GetCrossYaomoBossHurtAward(curPlayer, dataEx, tick)
# 买一送多活动免费奖励
elif rewardType == ChConfig.Def_RewardType_BuyOne:
PlayerActBuyOne.GetBuyOneFreeAward(curPlayer, dataEx, dataExStr)
@@ -4091,16 +4057,6 @@
curPlayer.ChangePos(sendPack_SeverPosX, sendPack_SeverPosY)
PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, sendPack_SeverPosX, sendPack_SeverPosY, moveType)
curPlayer.SetClientMoveTick(sendPack_WorldTick)
-
- # 后面必须返回True
- fightPet = curPlayer.GetPetMgr().GetFightPet()
- if fightPet:
- #出战宠物同时移动
- if moveType == 0 or tick - fightPet.GetActionTick() > 300:
-
- PetControl.FightPetFollowMove(curPlayer,sendPack_SeverPosX, sendPack_SeverPosY)
- fightPet.SetCurAction(IPY_GameWorld.laNPCNull)
-
return True
--
Gitblit v1.8.0