From 063c37a60dfad1fad8e31ee235e0d69c3ae35481 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 一月 2023 17:12:08 +0800
Subject: [PATCH] 9762 【BT8】【后端】藏宝阁(古宝特殊效果属性支持)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py | 38 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py | 620 +++++++++++++++++++++++++++-----------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 67 ++++
PySysDB/生成IpyGameDataPY/config.ini | 2
PySysDB/PySysDBPY.h | 25 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py | 26 +
7 files changed, 527 insertions(+), 254 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index bb6085d..56e744d 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -429,6 +429,15 @@
DWORD SkinValidTime; //有效时长秒
};
+//坐骑表
+
+struct tagHorse
+{
+ DWORD _HorseID; //坐骑ID
+ DWORD HorseSkinID; //外观物品ID
+ BYTE Quality; //坐骑品质
+};
+
//古宝表
struct tagGubao
@@ -446,8 +455,20 @@
WORD _GubaoID; //古宝ID
BYTE _GubaoStar; //古宝星级
list StarUPNeedItemInfo; //升星所需物品 [[物品ID,个数], ...]
- list StarAttrTypeList; //星级属性类型列表
- list StarAttrValueList; //星级属性值列表
+ list StarEffIDList; //星级特殊效果ID列表
+};
+
+//古宝特殊效果表
+
+struct tagGubaoEffAttr
+{
+ DWORD _GubaoEffID; //古宝特殊效果ID
+ BYTE GubaoEffType; //效果类型
+ DWORD EffCond; //条件
+ BYTE IsPer; //是否百分比提升
+ list EffFuncAttrIDList; //提升指定功能属性ID列表
+ DWORD EffAttrID; //直接增加属性类型
+ DWORD EffAttrValue; //提升属性值
};
//古宝品质升级表
diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini"
index b28f90d..6cab450 100644
--- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini"
+++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/config.ini"
@@ -1,5 +1,5 @@
[config]
; 项目根路径
-CodeProjectPath = E:\Git\SnxxServerCode\ServerPython
+CodeProjectPath = E:\SnxxServerCode\ServerPython
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
index 6b8aa6a..033278a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipWash.py
@@ -454,7 +454,7 @@
playControl.RefreshPlayerAttrState()
return
-def CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, allAttrList):
+def CalcAttr_EquipWash(curPlayer, equipIndex, equipPlace, baseAttrDictWash, allAttrList):
## 装备位洗练属性
washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % equipIndex)
maxWashLV = GetEquipWashMaxLV(curPlayer, equipIndex, equipPlace)
@@ -474,6 +474,7 @@
#GameWorld.DebugLog(" attrNum=%s,attrID=%s, attrValue=%s" % (attrNum, attrID, attrValue))
if attrValue:
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
+ baseAttrDictWash[attrID] = baseAttrDictWash.get(attrID, 0) + attrValue
return
def EquipWashSuccess(curPlayer, classLV):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 81a1658..60009ac 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -357,6 +357,12 @@
("DWORD", "SkinValidTime", 0),
),
+ "Horse":(
+ ("DWORD", "HorseID", 1),
+ ("DWORD", "HorseSkinID", 0),
+ ("BYTE", "Quality", 0),
+ ),
+
"Gubao":(
("WORD", "GubaoID", 1),
("BYTE", "GubaoQuality", 0),
@@ -368,8 +374,17 @@
("WORD", "GubaoID", 1),
("BYTE", "GubaoStar", 1),
("list", "StarUPNeedItemInfo", 0),
- ("list", "StarAttrTypeList", 0),
- ("list", "StarAttrValueList", 0),
+ ("list", "StarEffIDList", 0),
+ ),
+
+ "GubaoEffAttr":(
+ ("DWORD", "GubaoEffID", 1),
+ ("BYTE", "GubaoEffType", 0),
+ ("DWORD", "EffCond", 0),
+ ("BYTE", "IsPer", 0),
+ ("list", "EffFuncAttrIDList", 0),
+ ("DWORD", "EffAttrID", 0),
+ ("DWORD", "EffAttrValue", 0),
),
"GubaoLV":(
@@ -2759,6 +2774,19 @@
def GetHorseID(self): return self.HorseID # 对应坐骑ID
def GetSkinValidTime(self): return self.SkinValidTime # 有效时长秒
+# 坐骑表
+class IPY_Horse():
+
+ def __init__(self):
+ self.HorseID = 0
+ self.HorseSkinID = 0
+ self.Quality = 0
+ return
+
+ def GetHorseID(self): return self.HorseID # 坐骑ID
+ def GetHorseSkinID(self): return self.HorseSkinID # 外观物品ID
+ def GetQuality(self): return self.Quality # 坐骑品质
+
# 古宝表
class IPY_Gubao():
@@ -2781,15 +2809,34 @@
self.GubaoID = 0
self.GubaoStar = 0
self.StarUPNeedItemInfo = []
- self.StarAttrTypeList = []
- self.StarAttrValueList = []
+ self.StarEffIDList = []
return
def GetGubaoID(self): return self.GubaoID # 古宝ID
def GetGubaoStar(self): return self.GubaoStar # 古宝星级
def GetStarUPNeedItemInfo(self): return self.StarUPNeedItemInfo # 升星所需物品 [[物品ID,个数], ...]
- def GetStarAttrTypeList(self): return self.StarAttrTypeList # 星级属性类型列表
- def GetStarAttrValueList(self): return self.StarAttrValueList # 星级属性值列表
+ def GetStarEffIDList(self): return self.StarEffIDList # 星级特殊效果ID列表
+
+# 古宝特殊效果表
+class IPY_GubaoEffAttr():
+
+ def __init__(self):
+ self.GubaoEffID = 0
+ self.GubaoEffType = 0
+ self.EffCond = 0
+ self.IsPer = 0
+ self.EffFuncAttrIDList = []
+ self.EffAttrID = 0
+ self.EffAttrValue = 0
+ return
+
+ def GetGubaoEffID(self): return self.GubaoEffID # 古宝特殊效果ID
+ def GetGubaoEffType(self): return self.GubaoEffType # 效果类型
+ def GetEffCond(self): return self.EffCond # 条件
+ def GetIsPer(self): return self.IsPer # 是否百分比提升
+ def GetEffFuncAttrIDList(self): return self.EffFuncAttrIDList # 提升指定功能属性ID列表
+ def GetEffAttrID(self): return self.EffAttrID # 直接增加属性类型
+ def GetEffAttrValue(self): return self.EffAttrValue # 提升属性值
# 古宝品质升级表
class IPY_GubaoLV():
@@ -6461,10 +6508,14 @@
self.ipyHorseTrainLen = len(self.ipyHorseTrainCache)
self.ipyHorseSkinPlusCache = self.__LoadFileData("HorseSkinPlus", IPY_HorseSkinPlus)
self.ipyHorseSkinPlusLen = len(self.ipyHorseSkinPlusCache)
+ self.ipyHorseCache = self.__LoadFileData("Horse", IPY_Horse)
+ self.ipyHorseLen = len(self.ipyHorseCache)
self.ipyGubaoCache = self.__LoadFileData("Gubao", IPY_Gubao)
self.ipyGubaoLen = len(self.ipyGubaoCache)
self.ipyGubaoStarCache = self.__LoadFileData("GubaoStar", IPY_GubaoStar)
self.ipyGubaoStarLen = len(self.ipyGubaoStarCache)
+ self.ipyGubaoEffAttrCache = self.__LoadFileData("GubaoEffAttr", IPY_GubaoEffAttr)
+ self.ipyGubaoEffAttrLen = len(self.ipyGubaoEffAttrCache)
self.ipyGubaoLVCache = self.__LoadFileData("GubaoLV", IPY_GubaoLV)
self.ipyGubaoLVLen = len(self.ipyGubaoLVCache)
self.ipyShentongCache = self.__LoadFileData("Shentong", IPY_Shentong)
@@ -7049,10 +7100,14 @@
def GetHorseTrainByIndex(self, index): return self.ipyHorseTrainCache[index]
def GetHorseSkinPlusCount(self): return self.ipyHorseSkinPlusLen
def GetHorseSkinPlusByIndex(self, index): return self.ipyHorseSkinPlusCache[index]
+ def GetHorseCount(self): return self.ipyHorseLen
+ def GetHorseByIndex(self, index): return self.ipyHorseCache[index]
def GetGubaoCount(self): return self.ipyGubaoLen
def GetGubaoByIndex(self, index): return self.ipyGubaoCache[index]
def GetGubaoStarCount(self): return self.ipyGubaoStarLen
def GetGubaoStarByIndex(self, index): return self.ipyGubaoStarCache[index]
+ def GetGubaoEffAttrCount(self): return self.ipyGubaoEffAttrLen
+ def GetGubaoEffAttrByIndex(self, index): return self.ipyGubaoEffAttrCache[index]
def GetGubaoLVCount(self): return self.ipyGubaoLVLen
def GetGubaoLVByIndex(self, index): return self.ipyGubaoLVCache[index]
def GetShentongCount(self): return self.ipyShentongLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index 7204832..160fea1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -1,238 +1,382 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerGubao
-#
-# @todo:古宝系统
-# @author hxp
-# @date 2023-01-05
-# @version 1.0
-#
-# 详细描述: 古宝系统
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2023-01-05 15:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import ItemCommon
-import PlayerControl
-import IpyGameDataPY
-import ChPyNetSendPack
-import NetPackCommon
-import IPY_GameWorld
-import ChConfig
-
-def GetGubaoLVInfo(curPlayer, gubaoID):
- lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID)
- lv = lvInfo / 100
- star = lvInfo % 100
- return lv, star
-def SetGubaoLVInfo(curPlayer, gubaoID, lv, star):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoLVInfo % gubaoID, lv * 100 + star)
- return
-
-def OnPlayerLogin(curPlayer):
- Sync_GubaoInfo(curPlayer)
- return
-
-#// B2 16 古宝激活 #tagCMGubaoActivate
-#
-#struct tagCMGubaoActivate
-#{
-# tagHead Head;
-# WORD GubaoID;
-#};
-def OnGubaoActivate(index, curPackData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- playerID = curPlayer.GetPlayerID()
- gubaoID = curPackData.GubaoID
- ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
- if not ipyData:
- return
- needItemID = ipyData.GetUnlockItemID()
- needItemCnt = ipyData.GetUnlockItemCnt()
- if not needItemID or not needItemCnt:
- return
-
- lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
- if lv or star:
- GameWorld.DebugLog("古宝已经激活过! gubaoID=%s" % gubaoID, playerID)
- return
-
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
- if not hasEnough:
- GameWorld.DebugLog("激活古宝道具不足! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID)
- return
- ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao")
-
- lv, star = 1, 1
- SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
- GameWorld.Log("古宝激活成功! gubaoID=%s" % gubaoID, playerID)
-
- RefreshGubaoAttr(curPlayer)
- Sync_GubaoInfo(curPlayer, [gubaoID])
- return
-
-#// B2 17 古宝升星 #tagCMGubaoStarUp
-#
-#struct tagCMGubaoStarUp
-#{
-# tagHead Head;
-# WORD GubaoID;
-#};
-def OnGubaoStarUp(index, curPackData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- playerID = curPlayer.GetPlayerID()
- gubaoID = curPackData.GubaoID
-
- lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
- if not star:
- GameWorld.DebugLog("古宝未激活,无法升星! gubaoID=%s" % gubaoID, playerID)
- return
-
- if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoStar", gubaoID, star + 1):
- GameWorld.DebugLog("古宝已满星! gubaoID=%s,star=%s" % (gubaoID, star), playerID)
- return
-
- ipyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
- if not ipyData:
- return
- needItemList = ipyData.GetStarUPNeedItemInfo()
- if not needItemList:
- return
-
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
- if lackItemDict:
- GameWorld.DebugLog("古宝升星所需物品不足! star=%s,needItemList=%s,lackItemDict=%s" % (star, needItemList, lackItemDict), playerID)
- return
- #扣消耗
- ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
-
- updStar = star + 1
- SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar)
- GameWorld.Log("古宝升星: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID)
- RefreshGubaoAttr(curPlayer)
- Sync_GubaoInfo(curPlayer, [gubaoID])
- return
-
-#// B2 18 古宝升级 #tagCMGubaoLVUp
-#
-#struct tagCMGubaoLVUp
-#{
-# tagHead Head;
-# WORD GubaoID;
-#};
-def OnGubaoLVUp(index, curPackData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- playerID = curPlayer.GetPlayerID()
- gubaoID = curPackData.GubaoID
-
- lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
- if not star:
- GameWorld.DebugLog("古宝未激活,无法升级! gubaoID=%s" % gubaoID, playerID)
- return
-
- ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
- if not ipyData:
- return
- quality = ipyData.GetGubaoQuality()
-
- if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoLV", quality, lv + 1):
- GameWorld.DebugLog("古宝已满级! gubaoID=%s,quality=%s,lv=%s" % (gubaoID, quality, lv), playerID)
- return
-
- lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv)
- if not lvIpyData:
- return
- needItemList = lvIpyData.GetLVUPNeedItemInfo()
- if not needItemList:
- return
-
- itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
- if lackItemDict:
- GameWorld.DebugLog("古宝升级所需物品不足! quality=%s,lv=%s,needItemList=%s,lackItemDict=%s"
- % (quality, lv, needItemList, lackItemDict), playerID)
- return
- #扣消耗
- ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
-
- updLV = lv + 1
- SetGubaoLVInfo(curPlayer, gubaoID, updLV, star)
- GameWorld.Log("古宝升级: gubaoID=%s,quality=%s,updLV=%s" % (gubaoID, quality, updLV), playerID)
- RefreshGubaoAttr(curPlayer)
- Sync_GubaoInfo(curPlayer, [gubaoID])
- return
-
-def RefreshGubaoAttr(curPlayer):
- CalcGubaoAttr(curPlayer)
- PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
- return
-
-def CalcGubaoAttr(curPlayer):
-
- allAttrList = [{} for _ in range(4)]
-
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for index in xrange(ipyDataMgr.GetGubaoCount()):
- ipyData = ipyDataMgr.GetGubaoByIndex(index)
- gubaoID = ipyData.GetGubaoID()
- lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
- if not star:
- continue
-
- quality = ipyData.GetGubaoQuality()
- lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv)
- if lvIpyData:
- lvAttrTypeList = lvIpyData.GetLVAttrTypeList()
- lvAttrValueList = lvIpyData.GetLVAttrValueList()
- for i, attrID in enumerate(lvAttrTypeList):
- attrValue = lvAttrValueList[i]
- PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-
- starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
- if starIpyData:
- starAttrTypeList = starIpyData.GetStarAttrTypeList()
- starAttrValueList = starIpyData.GetStarAttrValueList()
- for i, attrID in enumerate(starAttrTypeList):
- attrValue = starAttrValueList[i]
- PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-
- # 保存计算值
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
- return
-
-def Sync_GubaoInfo(curPlayer, gubaoIDList=None):
- if gubaoIDList == None:
- syncIDList = []
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for index in range(ipyDataMgr.GetGubaoCount()):
- ipyData = ipyDataMgr.GetGubaoByIndex(index)
- syncIDList.append(ipyData.GetGubaoID())
- else:
- syncIDList = gubaoIDList
-
- gubaoInfoList = []
- for gubaoID in syncIDList:
- lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
- if not lv and not star and gubaoIDList == None:
- # 没有指定时只同步激活的
- continue
- gubao = ChPyNetSendPack.tagMCGubao()
- gubao.GubaoID = gubaoID
- gubao.GubaoLV = lv
- gubao.GubaoStar = star
- gubaoInfoList.append(gubao)
-
- if not gubaoInfoList:
- return
-
- clientPack = ChPyNetSendPack.tagMCGubaoInfo()
- clientPack.GubaoInfoList = gubaoInfoList
- clientPack.Count = len(clientPack.GubaoInfoList)
- NetPackCommon.SendFakePack(curPlayer, clientPack)
- return
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerGubao
+#
+# @todo:古宝系统
+# @author hxp
+# @date 2023-01-05
+# @version 1.0
+#
+# 详细描述: 古宝系统
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2023-01-05 15:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ItemCommon
+import PlayerControl
+import IpyGameDataPY
+import ChPyNetSendPack
+import NetPackCommon
+import IPY_GameWorld
+import PlayerHorse
+import PlayerDogz
+import PlayerPet
+import ChConfig
+
+def GetGubaoLVInfo(curPlayer, gubaoID):
+ lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID)
+ lv = lvInfo / 100
+ star = lvInfo % 100
+ return lv, star
+def SetGubaoLVInfo(curPlayer, gubaoID, lv, star):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoLVInfo % gubaoID, lv * 100 + star)
+ return
+
+def OnPlayerLogin(curPlayer):
+ Sync_GubaoInfo(curPlayer)
+ return
+
+#// B2 16 古宝激活 #tagCMGubaoActivate
+#
+#struct tagCMGubaoActivate
+#{
+# tagHead Head;
+# WORD GubaoID;
+#};
+def OnGubaoActivate(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ gubaoID = curPackData.GubaoID
+ ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
+ if not ipyData:
+ return
+ needItemID = ipyData.GetUnlockItemID()
+ needItemCnt = ipyData.GetUnlockItemCnt()
+ if not needItemID or not needItemCnt:
+ return
+
+ lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
+ if lv or star:
+ GameWorld.DebugLog("古宝已经激活过! gubaoID=%s" % gubaoID, playerID)
+ return
+
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, needItemCnt)
+ if not hasEnough:
+ GameWorld.DebugLog("激活古宝道具不足! needItemID=%s,needItemCnt=%s" % (needItemID, needItemCnt), playerID)
+ return
+ ItemCommon.ReduceItem(curPlayer, itemPack, itemList, needItemCnt, False, "Gubao")
+
+ lv, star = 1, 1
+ SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
+ GameWorld.Log("古宝激活成功! gubaoID=%s" % gubaoID, playerID)
+
+ RefreshGubaoAttr(curPlayer)
+ Sync_GubaoInfo(curPlayer, [gubaoID])
+ return
+
+#// B2 17 古宝升星 #tagCMGubaoStarUp
+#
+#struct tagCMGubaoStarUp
+#{
+# tagHead Head;
+# WORD GubaoID;
+#};
+def OnGubaoStarUp(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ gubaoID = curPackData.GubaoID
+
+ lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
+ if not star:
+ GameWorld.DebugLog("古宝未激活,无法升星! gubaoID=%s" % gubaoID, playerID)
+ return
+
+ if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoStar", gubaoID, star + 1):
+ GameWorld.DebugLog("古宝已满星! gubaoID=%s,star=%s" % (gubaoID, star), playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
+ if not ipyData:
+ return
+ needItemList = ipyData.GetStarUPNeedItemInfo()
+ if not needItemList:
+ return
+
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("古宝升星所需物品不足! star=%s,needItemList=%s,lackItemDict=%s" % (star, needItemList, lackItemDict), playerID)
+ return
+ #扣消耗
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
+
+ updStar = star + 1
+ SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar)
+ GameWorld.Log("古宝升星: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID)
+ RefreshGubaoAttr(curPlayer)
+ Sync_GubaoInfo(curPlayer, [gubaoID])
+ return
+
+#// B2 18 古宝升级 #tagCMGubaoLVUp
+#
+#struct tagCMGubaoLVUp
+#{
+# tagHead Head;
+# WORD GubaoID;
+#};
+def OnGubaoLVUp(index, curPackData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ gubaoID = curPackData.GubaoID
+
+ lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
+ if not star:
+ GameWorld.DebugLog("古宝未激活,无法升级! gubaoID=%s" % gubaoID, playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("Gubao", gubaoID)
+ if not ipyData:
+ return
+ quality = ipyData.GetGubaoQuality()
+
+ if not IpyGameDataPY.GetIpyGameDataNotLog("GubaoLV", quality, lv + 1):
+ GameWorld.DebugLog("古宝已满级! gubaoID=%s,quality=%s,lv=%s" % (gubaoID, quality, lv), playerID)
+ return
+
+ lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv)
+ if not lvIpyData:
+ return
+ needItemList = lvIpyData.GetLVUPNeedItemInfo()
+ if not needItemList:
+ return
+
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("古宝升级所需物品不足! quality=%s,lv=%s,needItemList=%s,lackItemDict=%s"
+ % (quality, lv, needItemList, lackItemDict), playerID)
+ return
+ #扣消耗
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
+
+ updLV = lv + 1
+ SetGubaoLVInfo(curPlayer, gubaoID, updLV, star)
+ GameWorld.Log("古宝升级: gubaoID=%s,quality=%s,updLV=%s" % (gubaoID, quality, updLV), playerID)
+ RefreshGubaoAttr(curPlayer)
+ Sync_GubaoInfo(curPlayer, [gubaoID])
+ return
+
+def RefreshGubaoAttr(curPlayer):
+ #CalcGubaoAttr(curPlayer)
+ PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
+ return
+
+def CalcGubaoAttr(curPlayer):
+
+ allAttrList = [{} for _ in range(4)]
+
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetGubaoCount()):
+ ipyData = ipyDataMgr.GetGubaoByIndex(index)
+ gubaoID = ipyData.GetGubaoID()
+ lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
+ if not star:
+ continue
+
+ quality = ipyData.GetGubaoQuality()
+ lvIpyData = IpyGameDataPY.GetIpyGameData("GubaoLV", quality, lv)
+ if lvIpyData:
+ lvAttrTypeList = lvIpyData.GetLVAttrTypeList()
+ lvAttrValueList = lvIpyData.GetLVAttrValueList()
+ for i, attrID in enumerate(lvAttrTypeList):
+ attrValue = lvAttrValueList[i]
+ PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
+
+ starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
+ if starIpyData:
+ starEffIDList = starIpyData.GetStarEffIDList()
+ effAttrInfo = {}
+ #GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
+ for effID in starEffIDList:
+ __calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
+ #GameWorld.DebugLog(" effID=%s,effAttrInfo=%s" % (effID, effAttrInfo))
+ for attrID, attrValue in effAttrInfo.items():
+ PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
+
+ # 保存计算值
+ #GameWorld.DebugLog("古宝属性: %s" % allAttrList)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
+ return
+
+def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
+ ''' 计算古宝特殊效果ID对应提升属性
+ '''
+ ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
+ if not ipyData:
+ return
+ effType = ipyData.GetGubaoEffType()
+ effCond = ipyData.GetEffCond()
+ attrID = ipyData.GetEffAttrID()
+ effAttrValue = ipyData.GetEffAttrValue()
+ if effAttrValue <= 0:
+ return
+ #效果类型 类型说明 条件
+ # 10 x品质灵宠攻击属性提升x% x品质
+ if effType == 10:
+ customAttrDictPet = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet)[2]
+ petQualityAttrInfo = customAttrDictPet.get("petQualityAttrInfo", {})
+ quality = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,petQualityAttrInfo=%s" % (effID, effType, quality, petQualityAttrInfo))
+ if quality not in petQualityAttrInfo:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, petQualityAttrInfo[quality], effAttrValue)
+
+ # 11 灵宠总等级每x级+xx属性 x级
+ elif effType == 11:
+ totalPetLV = PlayerPet.GetTotalPetLV(curPlayer)
+ addAttrValue = int(totalPetLV / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalPetLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalPetLV, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ # 12 灵宠每激活x只+xx属性 x只
+ elif effType == 12:
+ totalPetCount = PlayerPet.GetTotalPetCount(curPlayer)
+ addAttrValue = int(totalPetCount / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,totalPetCount=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, totalPetCount, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ # 13 x品质坐骑幻化属性提升x% x品质
+ elif effType == 13:
+ customAttrDictSkin = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin)[2]
+ horseSkinQualityAttrInfo = customAttrDictSkin.get("horseSkinQualityAttrInfo", {})
+ quality = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,horseSkinQualityAttrInfo=%s" % (effID, effType, quality, horseSkinQualityAttrInfo))
+ if quality not in horseSkinQualityAttrInfo:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, horseSkinQualityAttrInfo[quality], effAttrValue)
+
+ # 14 坐骑幻化激活x只+xx属性 x只
+ elif effType == 14:
+ horseSkinActCount = PlayerHorse.GetHorseSkinActCount(curPlayer)
+ addAttrValue = int(horseSkinActCount / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,horseSkinActCount=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, horseSkinActCount, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ # 15 每培养坐骑x次+xx属性 x次
+ elif effType == 15:
+ pass
+
+ #16 x阶装备强化属性提升x% x阶
+ elif effType == 16:
+ customAttrDictPlus = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Plus)[2]
+ classBaseAttrDictPlus = customAttrDictPlus.get("classBaseAttrDictPlus", {})
+ classLV = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictPlus=%s" % (effID, effType, classLV, classBaseAttrDictPlus))
+ if classLV not in classBaseAttrDictPlus:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictPlus[classLV], effAttrValue)
+
+ #17 x阶装备宝石属性提升x% x阶
+ elif effType == 17:
+ customAttrDictStone = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone)[2]
+ classBaseAttrDictStone = customAttrDictStone.get("classBaseAttrDictStone", {})
+ classLV = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictStone=%s" % (effID, effType, classLV, classBaseAttrDictStone))
+ if classLV not in classBaseAttrDictStone:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictStone[classLV], effAttrValue)
+
+ #18 x阶装备升星属性提升x% x阶
+ elif effType == 18:
+ customAttrDictStar = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Star)[2]
+ classBaseAttrDictStar = customAttrDictStar.get("classBaseAttrDictStar", {})
+ classLV = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictStar=%s" % (effID, effType, classLV, classBaseAttrDictStar))
+ if classLV not in classBaseAttrDictStar:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictStar[classLV], effAttrValue)
+
+ #19 x阶装备洗炼属性提升x% x阶
+ elif effType == 19:
+ customAttrDictWash = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash)[2]
+ classBaseAttrDictWash = customAttrDictWash.get("classBaseAttrDictWash", {})
+ classLV = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictWash=%s" % (effID, effType, classLV, classBaseAttrDictWash))
+ if classLV not in classBaseAttrDictWash:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictWash[classLV], effAttrValue)
+
+ #20 x阶装备附魔属性提升x% x阶
+ elif effType == 20:
+ customAttrDictEnchant = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Enchant)[2]
+ classBaseAttrDictEnchant = customAttrDictEnchant.get("classBaseAttrDictEnchant", {})
+ classLV = effCond
+ #GameWorld.DebugLog(" effID=%s,effType=%s,classLV=%s,classBaseAttrDictEnchant=%s" % (effID, effType, classLV, classBaseAttrDictEnchant))
+ if classLV not in classBaseAttrDictEnchant:
+ return
+ __addStarEffFuncAttr(ipyData, effAttrInfo, classBaseAttrDictEnchant[classLV], effAttrValue)
+
+ #21 出战神兽装备强化每x级+xx属性 x级
+ elif effType == 21:
+ fightDogzTotalPlusLv = PlayerDogz.GetFightDogzTotalPlusLv(curPlayer)
+ addAttrValue = int(fightDogzTotalPlusLv / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,effCond=%s,fightDogzTotalPlusLv=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, fightDogzTotalPlusLv, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ return
+
+def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
+ if not funcAttrInfo or effAttrValue <= 0:
+ return
+ isPer = ipyData.GetIsPer()
+ effAttrIDList = ipyData.GetEffFuncAttrIDList() # 提升指定功能属性ID列表
+ for attrID, attrValue in funcAttrInfo.items():
+ if effAttrIDList and attrID not in effAttrIDList:
+ continue
+ if isPer:
+ addAttrValue = int(attrValue * effAttrValue / 100.0)
+ else:
+ addAttrValue = effAttrValue
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+ return
+
+def Sync_GubaoInfo(curPlayer, gubaoIDList=None):
+ if gubaoIDList == None:
+ syncIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetGubaoCount()):
+ ipyData = ipyDataMgr.GetGubaoByIndex(index)
+ syncIDList.append(ipyData.GetGubaoID())
+ else:
+ syncIDList = gubaoIDList
+
+ gubaoInfoList = []
+ for gubaoID in syncIDList:
+ lv, star = GetGubaoLVInfo(curPlayer, gubaoID)
+ if not lv and not star and gubaoIDList == None:
+ # 没有指定时只同步激活的
+ continue
+ gubao = ChPyNetSendPack.tagMCGubao()
+ gubao.GubaoID = gubaoID
+ gubao.GubaoLV = lv
+ gubao.GubaoStar = star
+ gubaoInfoList.append(gubao)
+
+ if not gubaoInfoList:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCGubaoInfo()
+ clientPack.GubaoInfoList = gubaoInfoList
+ clientPack.Count = len(clientPack.GubaoInfoList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 926e4fd..ca0e5b0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -404,6 +404,8 @@
allAttrListSkin = [{} for _ in range(4)]
allAttrListTrain = [{} for _ in range(4)]
+ customAttrDictSkin = {}
+
horseSpeed = 0 # 坐骑功能增加的速度值,骑乘时才有效果
horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV)
# 等阶培养属性
@@ -436,6 +438,7 @@
# 幻化属性
initFPAdd = 0 #初始战力
+ horseSkinQualityAttrInfo = {}
for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
@@ -459,6 +462,17 @@
for attrID, attrValue in skinIpyData.GetAttrInfo().items():
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListSkin)
+ hIpyData = IpyGameDataPY.GetIpyGameData("Horse", horseID)
+ if hIpyData:
+ quality = hIpyData.GetQuality()
+ if quality not in horseSkinQualityAttrInfo:
+ horseSkinQualityAttrInfo[quality] = {}
+ qualityAttrDict = horseSkinQualityAttrInfo[quality]
+ for i, attrID in enumerate(attrTypeList):
+ attrValue = attrValueList[i]
+ qualityAttrDict[attrID] = qualityAttrDict.get(attrID, 0) + attrValue
+ customAttrDictSkin["horseSkinQualityAttrInfo"] = horseSkinQualityAttrInfo
+
# 新培养属性
for index in xrange(ipyDataMgr.GetHorseTrainCount()):
trainIpyData = ipyDataMgr.GetHorseTrainByIndex(index)
@@ -507,10 +521,20 @@
# 保存计算值
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse, allAttrList)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSoul, allAttrListHorseSoul)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseSkin, allAttrListSkin, customAttrDict=customAttrDictSkin)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_HorseTarin, allAttrListTrain)
return
+def GetHorseSkinActCount(curPlayer):
+ horseSkinActCount = 0
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
+ skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
+ if not CheckHorseSkinState(curPlayer, skinPlusIpyData):
+ continue
+ horseSkinActCount += 1
+ return horseSkinActCount
+
#// A5 27 坐骑提升 #tagCMHorseUp
#
#struct tagCMHorseUp
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
index e027e7a..bb6fab2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
@@ -787,6 +787,21 @@
totalPetLV += classLV
return totalPetLV
+def GetTotalPetCount(curPlayer):
+ totalPetCount = 0
+ petPackIndex = ShareDefine.rptPet
+ petPack = curPlayer.GetItemManager().GetPack(petPackIndex)
+ for i in range(petPack.GetCount()):
+ petItem = petPack.GetAt(i)
+ if petItem.IsEmpty():
+ continue
+ petItemNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
+ petIpyData = GetPetIpydata(petItemNPCID)
+ if not petIpyData:
+ continue
+ totalPetCount += 1
+ return totalPetCount
+
def IsPetMaxLV(curPlayer, petNPCID):
petItem = GetPetDataItemByNPCID(curPlayer, petNPCID)
if not petItem:
@@ -858,7 +873,9 @@
skillAttrList = [{} for _ in range(4)]
allAttrListPetSkin = [{} for _ in range(4)]
allAttrListTrain = [{} for _ in range(4)]
- totalMinAtk, totalMaxAtk = GetPetAtkValue(curPlayer)
+ customAttrDictPet = {}
+ totalMinAtk, totalMaxAtk, qualityAttrInfo = GetPetAtkValue(curPlayer)
+ customAttrDictPet["petQualityAttrInfo"] = qualityAttrInfo
PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMinAtk, totalMinAtk, allAttrListPet)
PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_PetMaxAtk, totalMaxAtk, allAttrListPet)
totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
@@ -923,7 +940,7 @@
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetTarin, allAttrListTrain)
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Pet, allAttrListPet, customAttrDict=customAttrDictPet)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSoul, allAttrListPetSoul)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSign, allAttrListPetSign)
@@ -962,9 +979,10 @@
## 获取灵兽出战时的攻击力
def GetPetAtkValue(curPlayer):
+ qualityAttrInfo = {}
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Pet):
#GameWorld.DebugLog(' 宠物功能未开启')
- return 0, 0
+ return 0, 0, qualityAttrInfo
classAddAtk = 0
petPackIndex = ShareDefine.rptPet
@@ -976,10 +994,20 @@
petItemNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
classlv = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
classIpyData = IpyGameDataPY.GetIpyGameData("PetClassCost", petItemNPCID, classlv + 1)
- classAddAtk += (classIpyData.GetAtkAdd() if classIpyData else 0)
+ atkAdd = classIpyData.GetAtkAdd() if classIpyData else 0
+ classAddAtk += atkAdd
+
+ petIpyData = GetPetIpydata(petItemNPCID)
+ if petIpyData:
+ quality = petIpyData.GetQuality()
+ if quality not in qualityAttrInfo:
+ qualityAttrInfo[quality] = {}
+ qualityAttrDict = qualityAttrInfo[quality]
+ qualityAttrDict[ShareDefine.Def_Effect_PetAtk] = qualityAttrDict.get(ShareDefine.Def_Effect_PetAtk, 0) + atkAdd
+
totalMinAtk = classAddAtk
totalMaxAtk = classAddAtk
- return totalMinAtk, totalMaxAtk
+ return totalMinAtk, totalMaxAtk, qualityAttrInfo
def OnPlayerPetLogin(curPlayer):
## 登录处理
--
Gitblit v1.8.0