From 8a951e63f3a9df81b288b410d8a3c73b8c1a6d08 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 27 八月 2024 19:00:14 +0800
Subject: [PATCH] 10251 【越南】【砍树】骑宠养成-新增养成战令
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py | 75 +++++++++++++++++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py | 14 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py | 10 +---
3 files changed, 91 insertions(+), 8 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py
index 617c3c7..76843f7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Zhanling.py
@@ -38,14 +38,10 @@
value = msgList[0]
if value == 0:
zhanlingType = msgList[1] if len(msgList) > 1 else 1
- for keyNum in range(10):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingReward % (zhanlingType, keyNum), 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH % (zhanlingType, keyNum), 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree % (zhanlingType, keyNum), 0)
+ backValue = msgList[2] if len(msgList) > 2 else None
+ PlayerZhanling.ResetZhanling(curPlayer, zhanlingType, backValue)
+ GameWorld.DebugAnswer(curPlayer, "重置战令(%s)!" % (zhanlingType))
- PlayerZhanling.SyncZhanlingInfo(curPlayer, zhanlingType)
- GameWorld.DebugAnswer(curPlayer, "重置战令(%s)奖励!" % (zhanlingType))
-
else:
zhanlingType = value
activiteC = msgList[1] if len(msgList) > 1 else 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
index 181c6ea..f6c1cca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetTrain.py
@@ -23,6 +23,7 @@
import FunctionNPCCommon
import PlayerBillboard
import ChPyNetSendPack
+import PlayerZhanling
import NetPackCommon
import PlayerActTask
import GameWorld
@@ -87,6 +88,8 @@
GameWorld.DebugLog("骑宠养成活动重置! actNum=%s,actID=%s,playerActID=%s,state=%s,cfgID=%s"
% (actNum, actID, playerActID, state, cfgID), playerID)
+ score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
+ PlayerZhanling.ResetZhanling(curPlayer, PlayerZhanling.ZhanlingType_HorsePetTrain, score)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainID % actNum, actID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActHorsePetTrainScore % actNum, 0)
@@ -198,6 +201,17 @@
GameWorld.Log("骑宠养成活动发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
return
+def GetActHorsePetTrainScore(curPlayer):
+ ## 获取活动中养成积分
+ actScore = 0
+ for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_HorsePetTrain, {}).values():
+ actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+ if not actInfo.get(ShareDefine.ActKey_State):
+ continue
+ score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActHorsePetTrainScore % actNum)
+ actScore = max(score, actScore)
+ return actScore
+
def Sync_HorsePetTrainActionInfo(curPlayer, actNum):
## 通知活动信息
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
index bf33463..b9f3c00 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -21,6 +21,7 @@
import PlayerControl
import ChPyNetSendPack
import PlayerGatherTheSoul
+import PlayerActHorsePetTrain
import ItemControler
import IPY_GameWorld
import PlayerGubao
@@ -35,7 +36,8 @@
ZhanlingType_GubaoStar,
ZhanlingType_Login,
ZhanlingType_GatherTheSoulLV,
-) = range(1, 1 + 6)
+ZhanlingType_HorsePetTrain,
+) = range(1, 1 + 7)
def OnPlayerLogin(curPlayer):
for zhanlingType in ZhanlingTypeList:
@@ -81,6 +83,75 @@
break
return
+def ResetZhanling(curPlayer, zhanlingType, backValue=None):
+ ''' 重置战令
+ @param zhanlingType: 战令类型
+ @param backValue: 重置战令时的战令奖励值,用于返还未领取奖励
+ '''
+ state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)
+ stateH = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)
+ updState = GameWorld.SetBitValue(state, zhanlingType, 0)
+ updStateH = GameWorld.SetBitValue(stateH, zhanlingType, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingState, updState)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingStateH, updStateH)
+ GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)"
+ % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID())
+
+ if backValue:
+ __giveUngetAward(curPlayer, zhanlingType, backValue, state&pow(2, zhanlingType), stateH&pow(2, zhanlingType))
+
+ for keyNum in range(10):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingReward % (zhanlingType, keyNum), 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH % (zhanlingType, keyNum), 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree % (zhanlingType, keyNum), 0)
+ SyncZhanlingInfo(curPlayer, zhanlingType)
+ return
+
+def __giveUngetAward(curPlayer, zhanlingType, backValue, activeState, activeStateH):
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
+ if not ipyDataList:
+ return
+ if not backValue:
+ return
+ playerID = curPlayer.GetPlayerID()
+ GameWorld.DebugLog("处理战令重置补发奖励: zhanlingType=%s,backValue=%s,activeState=%s,activeStateH=%s"
+ % (zhanlingType, backValue, activeState, activeStateH), playerID)
+ ungetItemDict = {}
+ for ipyData in ipyDataList:
+ needValue = ipyData.GetNeedValue()
+ rewardIndex = ipyData.GetRewardIndex()
+ if backValue < needValue:
+ break
+
+ if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]):
+ rewardItemList = ipyData.GetFreeRewardItemList()
+ for itemID, itemCount, _ in rewardItemList:
+ ungetItemDict[itemID] = ungetItemDict.get(itemID, 0) + itemCount
+ GameWorld.DebugLog(" 战令补发免费奖励: rewardIndex=%s,needValue=%s,%s, %s" % (rewardIndex, needValue, rewardItemList, ungetItemDict), playerID)
+
+ if activeState and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]):
+ rewardItemList = ipyData.GetZLRewardItemList()
+ for itemID, itemCount, _ in rewardItemList:
+ ungetItemDict[itemID] = ungetItemDict.get(itemID, 0) + itemCount
+ GameWorld.DebugLog(" 战令补发普通奖励: rewardIndex=%s,needValue=%s,%s, %s" % (rewardIndex, needValue, rewardItemList, ungetItemDict), playerID)
+
+ if activeStateH and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]):
+ rewardItemList = ipyData.GetZLRewardItemListH()
+ for itemID, itemCount, _ in rewardItemList:
+ ungetItemDict[itemID] = ungetItemDict.get(itemID, 0) + itemCount
+ GameWorld.DebugLog(" 战令补发高级奖励: rewardIndex=%s,needValue=%s,%s, %s" % (rewardIndex, needValue, rewardItemList, ungetItemDict), playerID)
+
+ if not ungetItemDict:
+ return
+ paramList = [zhanlingType]
+ itemList = []
+ for itemID, itemCount in ungetItemDict.items():
+ itemList.append([itemID, itemCount, 0])
+ GameWorld.DebugLog(" 战令补发奖励汇总: %s, %s" % (itemList, ungetItemDict), playerID)
+
+ PlayerControl.SendMailByKey("ZhanlingRewardUnget", [playerID], itemList, paramList)
+ return
+
def GetZhanlingReward(curPlayer, zhanlingType, rewardID):
## 领取战令奖励
rewardID = GameWorld.ToIntDef(rewardID)
@@ -107,6 +178,8 @@
curValue = GameWorld.GetDiff_Day(int(time.time()), firstLoginTime) + 1
elif zhanlingType == ZhanlingType_GatherTheSoulLV:
curValue = PlayerGatherTheSoul.GetGatherTheSoulTotalLV(curPlayer)
+ elif zhanlingType == ZhanlingType_HorsePetTrain:
+ curValue = PlayerActHorsePetTrain.GetActHorsePetTrainScore(curPlayer)
else:
return
--
Gitblit v1.8.0