From 9b026aee7db0db3e7c0f5efa354be73372a12a2a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 21 一月 2026 14:07:26 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(PK攻击顺序规则调整: PVE固定玩家先手,PVP先手排序优先级: 总先攻值 > 战力 > 挑战方先手; )
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 49 insertions(+), 4 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 5850b84..9f92601 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -125,14 +125,18 @@
import IPY_ServerDefine
import CommFunc
from PyMongoDB import RecvPackToMapDB
+import GMT_BroadCast
import PyMongoMain
import PlayerTalk
import PlayerHero
+import PlayerPreset
import PlayerOnline
import PlayerBeauty
import PlayerTravel
+import PlayerMingge
import TurnAttack
import PlayerHJG
+import ChEquip
import datetime
import time
@@ -696,7 +700,7 @@
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
- PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
+ PlayerControl.OnPlayerLogin(curPlayer)
DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
return
@@ -712,6 +716,7 @@
else:
PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
+ GMT_BroadCast.OnPlayerLogin(curPlayer)
PlayerHero.OnPlayerLogin(curPlayer)
PlayerMail.OnPlayerLogin(curPlayer)
PlayerHJG.OnPlayerLogin(curPlayer)
@@ -729,8 +734,11 @@
PlayerLLMJ.OnPlayerLogin(curPlayer)
PlayerBeauty.OnPlayerLogin(curPlayer)
PlayerTravel.OnPlayerLogin(curPlayer)
+ PlayerMingge.OnPlayerLogin(curPlayer)
OpenServerActivity.OnPlayerLogin(curPlayer)
+ PlayerPreset.OnPlayerLogin(curPlayer)
+ __OnFixVersion(curPlayer) # 修正线上玩家数据用,暂时放最后
# 上线查询一次充值订单
# curPlayer.SendDBQueryRecharge() 不查了,由在线轮询触发即可
@@ -738,6 +746,41 @@
isMixServerFirstLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MixServerFirstLogin)
msg = str([isMixServerFirstLogin])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "PlayerRealLoginOK", msg, len(msg))
+ return
+
+def __OnFixVersion(curPlayer):
+ ''' 修正线上玩家数据内容
+ 每次有需要修正时,只要定义一个新的系统内容版本号 sysFixVersion , 然后玩家根据自身版本号进行逐步修正即可
+ 这样只用到一个key即可,不需要每次都定义新的key
+ '''
+
+ playerID = curPlayer.GetPlayerID()
+ sysFixVersion = 2025123012 # 系统定义的最后一次修正版本号,一般以 yyyyMMddhh 定义为版本号
+ playerVersion = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FixVersion)
+ if not playerVersion:
+ createRoleTime = curPlayer.GetCreateRoleTime() # 按创角
+ ymd = createRoleTime.split(" ")[0]
+ playerVersion = GameWorld.ToIntDef("%s00" % ymd.replace("-", ""))
+ GameWorld.DebugLog("默认数据版本为创角日期: %s, %s" % (createRoleTime, playerVersion), playerID)
+
+ if playerVersion == sysFixVersion:
+ GameWorld.DebugLog("玩家当前数据版本号已是最新版本! playerVersion=%s" % (playerVersion), playerID)
+ return
+ GameWorld.Log("玩家当前数据版本号不等于系统版本号,开始修正! playerVersion=%s != %s" % (playerVersion, sysFixVersion), playerID)
+
+ # 修正玩家装备生命数值: 策划调整了生命占比,同步修改了生命战力,故需修正线上玩家装备生命,防止战力下降
+ fixVersion = 2025123012
+ if playerVersion < fixVersion:
+ ChEquip.FixRoleEquipHP(curPlayer, fixVersion)
+ # 每个版本修正完需要立即更新到对应的版本号值,防止中间某个版本修正失败,导致重登后重复修正已经处理的版本
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FixVersion, fixVersion)
+
+ # 其他
+ # 需要按修正版本时间顺序依次处理!!!需要按修正版本时间顺序依次处理!!!需要按修正版本时间顺序依次处理!!!
+
+
+ # 最终强制设置为最新版本号
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FixVersion, sysFixVersion)
return
## 玩家扩展信息同步
@@ -763,8 +806,7 @@
# 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
# 那么在DoPlayerLogin 中设置的数据将不会被保存, 如会导致第一个任务重复触发问题,记录多次发送
EventReport.WriteEvent_Entry(curPlayer, 4)
- #EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer)
-
+
curPlayer.SetFightPoint(1) # 初始化为1倍消耗
#---补满血满魔---
@@ -1020,7 +1062,6 @@
#检查更新总战斗力
#PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer, True)
- EventReport.WriteEvent_FightPower(curPlayer)
#清除在本地图离线记录信息
PlayerControl.RemoveLeaveServerPlayerInfo(curPlayer.GetPlayerID())
@@ -1201,6 +1242,10 @@
#初始化英雄背包
PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptHero)
+ #初始化卦玉背包
+ PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptMGGuayu, defaultMax=True, isSync=False)
+ PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptMGTuiyan, defaultMax=True, isSync=False)
+
#初始化临时交换背包,默认最大个数
PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTempSwap, defaultMax=True, isSync=False)
--
Gitblit v1.8.0