From 6e85f0b43d92ae01de2432e8da0dd41646c7361c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 04 十二月 2025 14:54:38 +0800
Subject: [PATCH] 16 卡牌服务端(修复重读脚本后db报错: 重读后导致类继承出现问题,固重读时过滤掉py库及第三方库不重读;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 94 insertions(+), 3 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index bc315b1..0b32d31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -21,9 +21,11 @@
import IPY_GameWorld
import ItemControler
import ChPyNetSendPack
+import PlayerActivity
import NetPackCommon
import PlayerControl
import PlayerOnline
+import PlayerTask
import GameWorld
import ChConfig
@@ -38,6 +40,7 @@
def OnPlayerLogin(curPlayer):
Sync_HeroInfo(curPlayer)
Sync_PlayerHeroInfo(curPlayer)
+ Sync_LineupRecommendInfo(curPlayer)
return
def OnPlayerFirstLogin(curPlayer):
@@ -349,6 +352,9 @@
heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
+
+ PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroLVUP, 1)
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroLVUP)
return
def GetHeroLVMax(heroItem):
@@ -467,6 +473,9 @@
item.SetUserAttr(ShareDefine.Def_IudetHeroStar, updStar)
if addStar > 0:
__DoHeroStarTalentUp(item, addStar)
+ PlayerActivity.AddDailyTaskValue(curPlayer, ChConfig.DailyTask_HeroStarUP, addStar)
+ PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_HeroStarUP, addStar)
+
if isSync:
heroItem.Sync_Item()
@@ -1053,6 +1062,20 @@
__doHeroBookAct(curPlayer, heroID)
return
+def GetHeroBookActCnt(curPlayer):
+ ## 获取武将图鉴已激活数量
+ bookCnt = 0
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetHeroCount()):
+ ipyData = ipyDataMgr.GetHeroByIndex(index)
+ heroID = ipyData.GetHeroID()
+ if not ipyData.GetPlayerCanUse():
+ continue
+ if not GetHeroBookInitState(curPlayer, heroID):
+ continue
+ bookCnt += 1
+ return bookCnt
+
def __doHeroBookAct(curPlayer, heroID):
## 图鉴激活
playerID = curPlayer.GetPlayerID()
@@ -1076,11 +1099,13 @@
if awardMoneyInfo and len(awardMoneyInfo) == 2:
moneyType, moneyValue = awardMoneyInfo
if moneyType and moneyValue:
- PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "HeroBookAct")
+ PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "HeroBookAct", notifyAward=True)
Sync_HeroInfo(curPlayer, [heroID])
RefreshLordAttr(curPlayer)
+
+ PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_HeroBook)
return
def __doHeroBookStarLVUP(curPlayer, heroID):
@@ -1415,7 +1440,7 @@
for syncItem in syncItemDict.values():
syncItem.Sync_Item()
- lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID)
+ lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID, False)
lineup.UpdLineup(heroItemDict, shapeType)
return
@@ -1431,6 +1456,41 @@
# curPlayer.SetResetItemTick(0)
# ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
# return
+
+def GetLineupRecommendAward(curPlayer, recommendID, index):
+ ## 领取阵容推荐奖励
+ index = GameWorld.ToIntDef(index)
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroRecommend % recommendID)
+ if awardState & pow(2, index):
+ GameWorld.DebugLog("阵容推荐奖励已领取! recommendID=%s,index=%s" % (recommendID, index))
+ return
+ ipyData = IpyGameDataPY.GetIpyGameData("LineupRecommend", recommendID)
+ if not ipyData:
+ return
+ heroIDList = ipyData.GetHeroIDList()
+ if index >= len(heroIDList):
+ return
+ heroID = heroIDList[index]
+ heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+ if not heroIpyData:
+ return
+ quality = heroIpyData.GetQuality()
+ qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+ if not qualityIpyData:
+ return
+ awardMoneyInfo = qualityIpyData.GetRecommendAwardMoney()
+ if not awardMoneyInfo or len(awardMoneyInfo) != 2:
+ return
+ moneyType, moneyValue = awardMoneyInfo
+ if GetHeroActivite(curPlayer, heroID) != 1:
+ GameWorld.DebugLog("武将未获得过,不可激活阵容推荐! heroID=%s" % (heroID))
+ return
+ awardState |= pow(2, index)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroRecommend % recommendID, awardState)
+ GameWorld.DebugLog("阵容推荐领奖! recommendID=%s,index=%s,heroID=%s,awardState=%s" % (recommendID, index, heroID, awardState))
+ PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "LineupRecommend", notifyAward=True)
+ Sync_LineupRecommendInfo(curPlayer, [recommendID])
+ return
def RefreshLordAttr(curPlayer):
## 刷新主公属性
@@ -1448,6 +1508,8 @@
for index in range(ipyDataMgr.GetHeroCount()):
ipyData = ipyDataMgr.GetHeroByIndex(index)
heroID = ipyData.GetHeroID()
+ if not ipyData.GetPlayerCanUse():
+ continue
if not GetHeroBookInitState(curPlayer, heroID):
# 图鉴未激活
continue
@@ -1476,6 +1538,8 @@
ipyDataMgr = IpyGameDataPY.IPY_Data()
for index in range(ipyDataMgr.GetHeroCount()):
ipyData = ipyDataMgr.GetHeroByIndex(index)
+ if not ipyData.GetPlayerCanUse():
+ continue
syncHeroIDList.append(ipyData.GetHeroID())
if not syncHeroIDList:
@@ -1518,7 +1582,7 @@
lineupList = []
olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
for lineupID in syncIDList:
- lineup = olPlayer.GetLineup(lineupID)
+ lineup = olPlayer.GetLineup(lineupID, False)
if not lineup:
continue
@@ -1551,3 +1615,30 @@
clientPack.AwakeRebirthCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroAwakeRebirthCnt)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
+
+def Sync_LineupRecommendInfo(curPlayer, syncIDList=None):
+
+ recommendList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetLineupRecommendCount()):
+ ipyData = ipyDataMgr.GetLineupRecommendByIndex(index)
+ recommendID = ipyData.GetRecommendID()
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroRecommend % recommendID)
+ if syncIDList != None:
+ if recommendID not in syncIDList:
+ continue
+ elif not awardState:
+ continue
+ recommend = ChPyNetSendPack.tagSCLineupRecommend()
+ recommend.RecommendID = recommendID
+ recommend.AwardState = awardState
+ recommendList.append(recommend)
+
+ if not recommendList:
+ return
+
+ clientPack = ChPyNetSendPack.tagSCLineupRecommendInfo()
+ clientPack.RecommendList = recommendList
+ clientPack.Count = len(clientPack.RecommendList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
--
Gitblit v1.8.0