From 6eb8ce81a683bf5a3024877fdcd4d8c95a8c87b5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 29 六月 2023 17:15:43 +0800
Subject: [PATCH] 9818 【BT10】新增古宝特效效果
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py | 104 +++++++++++++++++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py | 2
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py | 19 +++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 3
PySysDB/PySysDBPY.h | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py | 13 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py | 5 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py | 13 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py | 15 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py | 7 +
12 files changed, 173 insertions(+), 13 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 0f4e877..e01a522 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -2180,6 +2180,7 @@
struct tagCoat
{
DWORD _CoatID; //时装编号
+ BYTE CostQuality; //时装品质 0-普通;1-稀有;2-传说
list EquipItemID; //装备物品ID(按职业顺序)
DWORD UnlockItemID; //材料物品ID
DWORD MaxLV; //最大星级
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
index af2f1e7..284ca17 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossYaomoBoss.py
@@ -204,7 +204,7 @@
# 通知子服更新玩家总伤害
if syncPlayerHurtInfo:
serverGroupIDList = []
- sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo}
+ sendMsg = {"syncPlayerHurtInfo":syncPlayerHurtInfo, "killBoss":1}
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossYaomoBossHurtInfo, sendMsg, serverGroupIDList)
return
@@ -228,6 +228,7 @@
#zoneID = msgData["zoneID"]
#npcID = msgData["npcID"]
syncPlayerHurtInfo = msgData["syncPlayerHurtInfo"]
+ isKillBoss = msgData.get("killBoss") == 1
for playerID, hurtInfo in syncPlayerHurtInfo.items():
if not PlayerControl.GetDBPlayerAccIDByID(playerID):
@@ -242,12 +243,16 @@
continue
Sync_CrossYaomoBossPlayerHurtInfo(curPlayer)
- if awardIndex == None:
- continue
-
- # 通知地图发放奖励
- msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
- CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
+ if awardIndex != None:
+ # 通知地图发放奖励
+ msgInfo = ["HurtValueAward", [awardIndex, awardItemList]]
+ CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
+
+ if isKillBoss:
+ # 通知地图击杀妖魔boss
+ msgInfo = ["KillYaomoBoss", hurtInfo]
+ CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossYaomoBoss", msgInfo)
+
return
def OnPlayerLogin(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
index 2c27930..323d9b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ElderBattlefield.py
@@ -37,6 +37,7 @@
import SkillCommon
import PlayerWeekParty
import PlayerTongTianLing
+import PlayerGubao
import random
import time
@@ -174,6 +175,7 @@
EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_ElderBattlefield, 0, ChConfig.CME_Log_Start)
PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_ElderBattlefield, 1)
PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ElderBattlefield, 1)
+ PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_ElderBattlefield, 1)
else:
rebornBuffLV = GameWorld.GetGameFB().GetPlayerGameFBDictByKey(playerID, FBPlayerDict_RebornBuffLV)
__DoAddRebornBuff(curPlayer, rebornBuffLV, tick)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
index 7b365e5..03f7aaf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyWar.py
@@ -34,6 +34,7 @@
import NetPackCommon
import SkillCommon
import EventReport
+import PlayerGubao
import ItemCommon
import BuffSkill
import AICommon
@@ -525,6 +526,7 @@
FBCommon.SetHadDelTicket(curPlayer)
FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_FamilyWar)
PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyWar, 1)
+ PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_FamilyWar, 1)
isFinalMatch = gameFB.GetGameFBDictByKey(GameFBDict_IsFinalMatch)
roundNum = gameFB.GetGameFBDictByKey(GameFBDict_RoundNum)
groupID = gameFB.GetGameFBDictByKey(GameFBDict_GroupID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 4ca2ee5..082c2a2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1702,6 +1702,7 @@
"Coat":(
("DWORD", "CoatID", 1),
+ ("BYTE", "CostQuality", 0),
("list", "EquipItemID", 0),
("DWORD", "UnlockItemID", 0),
("DWORD", "MaxLV", 0),
@@ -5602,6 +5603,7 @@
def __init__(self):
self.CoatID = 0
+ self.CostQuality = 0
self.EquipItemID = []
self.UnlockItemID = 0
self.MaxLV = 0
@@ -5610,6 +5612,7 @@
return
def GetCoatID(self): return self.CoatID # 时装编号
+ def GetCostQuality(self): return self.CostQuality # 时装品质 0-普通;1-稀有;2-传说
def GetEquipItemID(self): return self.EquipItemID # 装备物品ID(按职业顺序)
def GetUnlockItemID(self): return self.UnlockItemID # 材料物品ID
def GetMaxLV(self): return self.MaxLV # 最大星级
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
index 9b81661..2cfa3b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoat.py
@@ -152,6 +152,19 @@
Sync_ClothesCoatSkinInfo(curPlayer, coatID)
return
+def GetCoatQualityLVInfo(curPlayer):
+ costQualityLVDict = {}
+ ipyMgr = IpyGameDataPY.IPY_Data()
+ for i in xrange(ipyMgr.GetCoatCount()):
+ ipyData = ipyMgr.GetCoatByIndex(i)
+ coatID = ipyData.GetCoatID()
+ costQuality = ipyData.GetCostQuality()
+ skinLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ClothesSkinLV % coatID)
+ if not skinLV:
+ continue
+ costQualityLVDict[costQuality] = costQualityLVDict.get(costQuality, 0) + skinLV
+ return costQualityLVDict
+
## 计算时装属性
# @param curPlayer 玩家
# @param allAttrList 属性列表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
index ac3be22..e078e9b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
@@ -28,6 +28,7 @@
import ItemControler
import PlayerActivity
import PlayerSuccess
+import PlayerGubao
def DoPlayerLogin(curPlayer):
@@ -238,6 +239,7 @@
PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossBattlefield, addCnt)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_HighScoreToday, highScoreToday)
+ PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossBattlefield, 1)
if isSameWeek:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Battlefield_EnterCountWeek, enterCountWeek)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
index 4db1a8c..db5c2f6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossYaomoBoss.py
@@ -24,6 +24,7 @@
import ShareDefine
import ItemCommon
import ChConfig
+import PlayerGubao
def OnYaomoBossStateChange(state, tick):
## 活动状态变更
@@ -104,6 +105,10 @@
if msgType == "HurtValueAward":
__DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg)
+ ## 参与击杀妖魔boss
+ if msgType == "KillYaomoBoss":
+ PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_CrossYaomoBoss, 1)
+
return
def __DoGiveCrossYaomoBossHurtAward(curPlayer, dataMsg):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
index 03faaa6..8348670 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDienstgrad.py
@@ -463,6 +463,21 @@
titleActiveList.append(curGradID)
return titleActiveList
+def GetDienstgradActiveTypeCountInfo(curPlayer):
+ activeTypeCountDict = {}
+ dienstgradManager = curPlayer.GetDienstgradManager()
+ gradCnt = dienstgradManager.GetCount()
+ for i in xrange(gradCnt):
+ curGradID = dienstgradManager.AtGradID(i)
+ if curGradID == 0:
+ continue
+ curDienstgradData = GetDienstgradData(curGradID)
+ if curDienstgradData == None:
+ continue
+ curType = curDienstgradData.GetType()
+ activeTypeCountDict[curType] = activeTypeCountDict.get(curType, 0) + 1
+ return activeTypeCountDict
+
def CalcAllDienstgradAttr(curPlayer):
# 计算全部称号属性
allAttrList = [{} for i in range(4)]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
index 5e93428..6704927 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFaQi.py
@@ -130,6 +130,8 @@
return
allAttrList = [{} for _ in range(4)]
+ customAttrDictFaQi = {}
+ faQiAllAttrInfo = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
for index in xrange(ipyDataMgr.GetFaQiLVUpCount()):
@@ -147,6 +149,7 @@
lvAttrValueList = lvupIpyData.GetLVAttrValue()
for i, attrID in enumerate(lvAttrTypeList):
attrValue = lvAttrValueList[i]
+ faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
# 培养丹增加属性
@@ -157,10 +160,12 @@
attrMultiple = upItemCount / upItemPerCount
for i, attrID in enumerate(upItemAttrTypeList):
attrValue = upItemAttrValueList[i]
+ faQiAllAttrInfo[attrID] = faQiAllAttrInfo.get(attrID, 0) + attrValue
PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrList)
+ customAttrDictFaQi["faQiAllAttrInfo"] = faQiAllAttrInfo
# 保存计算值
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi, allAttrList, customAttrDict=customAttrDictFaQi)
return
def Sync_FaQiLVInfo(curPlayer):
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 1cc9d8b..66493cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -29,6 +29,17 @@
import PlayerPet
import ChConfig
import ItemControler
+import PlayerDienstgrad
+import PlayerCoat
+
+GubaoEffType_FamilyWar = 48 # 参与仙盟联赛每X次+XXX属性 x次
+GubaoEffType_ElderBattlefield = 49 # 参与上古战场每X次+XXX属性 x次
+GubaoEffType_CrossBattlefield = 50 # 参与古神战场每X次+XXX属性 x次
+GubaoEffType_CrossYaomoBoss = 51 # 参与魔王入侵每X次+XXX属性 x次
+GubaoEffType_CrossFamilyFlagwar = 52 # 参与逐鹿万界每X次+XXX属性 x次
+
+GubaoEffAttrIypeList = [GubaoEffType_FamilyWar, GubaoEffType_ElderBattlefield, GubaoEffType_CrossBattlefield,
+ GubaoEffType_CrossYaomoBoss, GubaoEffType_CrossFamilyFlagwar]
GubaoEffType_ActivityPlace = 33 # 活跃修炼x次可领取物品 x次
GubaoEffType_Arena = 34 # 竞技场挑战x次可领取物品 x次
@@ -296,17 +307,17 @@
effAttrInfo = {}
#GameWorld.DebugLog("GubaoStar属性: gubaoID=%s,star=%s,starEffIDList=%s" % (gubaoID, star, starEffIDList))
for effID in starEffIDList:
- __calcStarEffAttrByID(curPlayer, effID, effAttrInfo)
+ __calcStarEffAttrByID(curPlayer, gubaoID, 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)
+ GameWorld.DebugLog("古宝属性: %s" % allAttrList)
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Gubao, allAttrList)
return
-def __calcStarEffAttrByID(curPlayer, effID, effAttrInfo):
+def __calcStarEffAttrByID(curPlayer, gubaoID, effID, effAttrInfo):
''' 计算古宝特殊效果ID对应提升属性
'''
ipyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
@@ -555,6 +566,85 @@
if attrID > 0 and addAttrValue > 0:
effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+ #41 x类型神兵每X级+X属性 x类型 x级
+ elif effType == 41:
+ gwType = effCond
+ gwLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % gwType)
+ addAttrValue = int(gwLV / effCond2 * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,gwType=%s,gwLV=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, gwType, gwLV, effCond2, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ #42 法器每X阶+X%法器总属性 x阶
+ elif effType == 42:
+ customAttrDictFaQi = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FaQi)[2]
+ faQiAllAttrInfo = customAttrDictFaQi.get("faQiAllAttrInfo", {})
+ faQiLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FaQiLV)
+ addPer = int(faQiLV / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,faQiLV=%s,addPer=%s,faQiAllAttrInfo=%s" % (effID, effType, faQiLV, addPer, faQiAllAttrInfo))
+ __addStarEffFuncAttr(ipyData, effAttrInfo, faQiAllAttrInfo, addPer)
+
+ #43 每拥有X个X类型的称号+X属性 x类型 x个
+ elif effType == 43:
+ activeTypeCountDict = PlayerDienstgrad.GetDienstgradActiveTypeCountInfo(curPlayer)
+ dType = effCond
+ activeCount = activeTypeCountDict.get(dType, 0)
+ addAttrValue = int(activeCount / effCond2 * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,dType=%s,activeTypeCountDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, dType, activeTypeCountDict, effCond2, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+
+ #44 X品质时装总星数每X星+X属性 x类型 x星
+ elif effType == 44:
+ costQualityLVDict = PlayerCoat.GetCoatQualityLVInfo(curPlayer)
+ quality = effCond
+ lvTotal = costQualityLVDict.get(quality, 0)
+ addAttrValue = int(lvTotal / effCond2 * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,quality=%s,costQualityLVDict=%s,effCond2=%s,attrID=%s,addAttrValue=%s" % (effID, effType, quality, costQualityLVDict, effCond2, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ #45 每X级魅力等级+X属性 x级
+ elif effType == 45:
+ charmLV = PlayerControl.GetCharmLV(curPlayer)
+ addAttrValue = int(charmLV / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,charmLV=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, charmLV, effCond, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ #46 每拥有X个神通技能+X属性 x个
+ elif effType == 46:
+ customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
+ shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
+ skillCount = len(shentongSkillInfo)
+ addAttrValue = int(skillCount / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,skillCount=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillCount, effCond, attrID, addAttrValue, shentongSkillInfo))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ #47 神通技能总等级每X级+X属性 x级
+ elif effType == 47:
+ customAttrDictShentong = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong)[2]
+ shentongSkillInfo = customAttrDictShentong.get("shentongSkillInfo", {})
+ skillLVTotal = sum(shentongSkillInfo.values())
+ addAttrValue = int(skillLVTotal / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,skillLVTotal=%s,effCond=%s,attrID=%s,addAttrValue=%s,shentongSkillInfo=%s" % (effID, effType, skillLVTotal, effCond, attrID, addAttrValue, shentongSkillInfo))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
+ #48 参与仙盟联赛每X次+XXX属性 x次
+ #49 参与上古战场每X次+XXX属性 x次
+ #50 参与古神战场每X次+XXX属性 x次
+ #51 参与魔王入侵每X次+XXX属性 x次
+ #52 参与逐鹿万界每X次+XXX属性 x次
+ elif effType in GubaoEffAttrIypeList:
+ effValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
+ addAttrValue = int(effValue / effCond * effAttrValue)
+ #GameWorld.DebugLog(" effID=%s,effType=%s,effValue=%s,effCond=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effValue, effCond, attrID, addAttrValue))
+ if attrID > 0 and addAttrValue > 0:
+ effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+
return
def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
@@ -574,8 +664,9 @@
return
def AddGubaoItemEffValue(curPlayer, effType, addCnt):
- if effType not in GubaoEffTtemIypeList:
+ if effType not in GubaoEffTtemIypeList and effType not in GubaoEffAttrIypeList:
return
+ isAttr = False
ipyDataMgr = IpyGameDataPY.IPY_Data()
for index in xrange(ipyDataMgr.GetGubaoCount()):
ipyData = ipyDataMgr.GetGubaoByIndex(index)
@@ -599,6 +690,11 @@
GameWorld.DebugLog("更新古宝物品效果类型进度值: gubaoID=%s,effID=%s,effType=%s,effValue=%s,addCnt=%s,updValue=%s"
% (gubaoID, effID, effType, effValue, addCnt, updValue), curPlayer.GetPlayerID())
Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
+ if effType in GubaoEffAttrIypeList:
+ isAttr = True
+
+ if isAttr:
+ RefreshGubaoAttr(curPlayer)
return
def GetGubaoItemEffAward(curPlayer, gubaoID, effIDStr):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
index b75aeec..3372899 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerShentong.py
@@ -230,9 +230,11 @@
def CalcShentongAttr(curPlayer):
+ customAttrDictShentong = {}
fightPowerEx = 0
allAttrList = [{} for _ in range(4)]
+ shentongSkillInfo = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
for index in xrange(ipyDataMgr.GetShentongCount()):
ipyData = ipyDataMgr.GetShentongByIndex(index)
@@ -258,10 +260,19 @@
if lvIpyData.GetFightPowerEx():
fightPowerEx += lvIpyData.GetFightPowerEx()
+ LVSkillID = lvIpyData.GetLVSkillID()
+ if LVSkillID:
+ skillData = GameWorld.GetGameData().GetSkillBySkillID(LVSkillID)
+ if skillData:
+ skillTypeID = skillData.GetSkillTypeID()
+ skillLV = skillData.GetSkillLV()
+ shentongSkillInfo[skillTypeID] = skillLV
+
+ customAttrDictShentong["shentongSkillInfo"] = shentongSkillInfo
# 附加战力
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Shentong, fightPowerEx)
# 保存计算值
- PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList)
+ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList, customAttrDict=customAttrDictShentong)
return
def Sync_ShentongLVInfo(curPlayer, shentongIDList=None):
--
Gitblit v1.8.0