From 7e1ba2e087d31b03a09865e43d31cae1ab774680 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 03 九月 2024 16:06:39 +0800
Subject: [PATCH] 10258 【越南】【砍树】新增古宝特殊效果(增加灵根点效果;增加提升坐骑基础属性X%;坐骑每升X级加X点属性)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py |   93 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 1 deletions(-)

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 0ecab99..0adab07 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -58,6 +58,12 @@
                         GubaoEffType_CrossRealmPK,
                         ]
 
+# 古宝灵根点特殊效果列表
+GubaoEffFreePointTypeList = [54, 55, 56]
+
+# 需要记录EffValue的EffType列表
+NeedGubaoItemEffValueTypeList = GubaoEffAttrIypeList + GubaoEffTtemIypeList + GubaoEffFreePointTypeList
+
 def GetGubaoLVInfo(curPlayer, gubaoID):
     lvInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoLVInfo % gubaoID)
     lv = lvInfo / 100
@@ -68,6 +74,7 @@
     return
 
 def OnPlayerLogin(curPlayer):
+    DoGubaoAddFreePoint(curPlayer) # 上线检查一下,修改配置可生效
     Sync_GubaoInfo(curPlayer)
     Sync_GubaoItemEffInfo(curPlayer)
     Sync_GubaoPieceInfo(curPlayer)
@@ -156,6 +163,7 @@
     lv, star = 1, 1
     SetGubaoLVInfo(curPlayer, gubaoID, lv, star)
     GameWorld.Log("古宝激活成功! gubaoID=%s" % gubaoID, playerID)
+    DoGubaoAddFreePoint(curPlayer, gubaoID)
     
     RefreshGubaoAttr(curPlayer)
     Sync_GubaoInfo(curPlayer, [gubaoID])
@@ -253,11 +261,79 @@
     updStar = star + 1
     SetGubaoLVInfo(curPlayer, gubaoID, lv, updStar)
     GameWorld.Log("古宝升星: gubaoID=%s,updStar=%s" % (gubaoID, updStar), playerID)
+    DoGubaoAddFreePoint(curPlayer, gubaoID)
     RefreshGubaoAttr(curPlayer)
     Sync_GubaoInfo(curPlayer, [gubaoID])
     
     PlayerActGubao.OnGubaoCost(curPlayer, needPieceInfo, realNeedItemList)
     return
+
+def DoGubaoAddFreePoint(curPlayer, gubaoID=0):
+    playerID = curPlayer.GetPlayerID()
+    effPointDict = {}
+    if gubaoID:
+        __calcStarEffAddFreePoint(curPlayer, gubaoID, effPointDict)
+    else:
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for index in xrange(ipyDataMgr.GetGubaoCount()):
+            ipyData = ipyDataMgr.GetGubaoByIndex(index)
+            gubaoID = ipyData.GetGubaoID()
+            __calcStarEffAddFreePoint(curPlayer, gubaoID, effPointDict)
+            
+    if not effPointDict:
+        return
+    
+    unAddFreePointTotal = 0
+    for effKey, addFreePointTotal in effPointDict.items():
+        gubaoID, star, effType = effKey 
+        # 已增加的点数
+        addFreePointAlready = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType))
+        unAddFreePoint = max(0, addFreePointTotal - addFreePointAlready)
+        unAddFreePointTotal += unAddFreePoint
+        GameWorld.DebugLog("古宝星级增加灵根点: gubaoID=%s,star=%s,addFreePointTotal=%s,addFreePointAlready=%s,unAddFreePoint=%s,total=%s" 
+                           % (gubaoID, star, addFreePointTotal, addFreePointAlready, unAddFreePoint, unAddFreePointTotal), playerID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoItemEffValue % (gubaoID, effType), addFreePointTotal)
+        if unAddFreePoint:
+            Sync_GubaoItemEffInfo(curPlayer, gubaoID, effType, True)
+            
+    if unAddFreePointTotal <= 0:
+        return
+    freePoint = curPlayer.GetFreePoint()
+    updFreePoint = freePoint + unAddFreePointTotal
+    curPlayer.SetFreePoint(updFreePoint)
+    return
+
+def __calcStarEffAddFreePoint(curPlayer, gubaoID, effPointDict):
+    _, star = GetGubaoLVInfo(curPlayer, gubaoID)
+    if not star:
+        return
+    starIpyData = IpyGameDataPY.GetIpyGameData("GubaoStar", gubaoID, star)
+    if not starIpyData:
+        return
+    starEffIDList = starIpyData.GetStarEffIDList()
+    for effID in starEffIDList:
+        effIpyData = IpyGameDataPY.GetIpyGameData("GubaoEffAttr", effID)
+        if not effIpyData:
+            continue
+        effType = effIpyData.GetGubaoEffType()
+        effCond = effIpyData.GetEffCond()
+        effAttrValue = effIpyData.GetEffAttrValue()
+        
+        effKey = (gubaoID, star, effType)
+        if effType == 54: # 增加x点灵根
+            addFreePointTotal = effIpyData.GetEffAttrValue()
+            effPointDict[effKey] = effPointDict.get(effKey, 0) + addFreePointTotal
+        elif effType == 55: # 境界每级增加X点灵根
+            realmLV = curPlayer.GetOfficialRank()
+            addFreePointTotal = int(realmLV / effCond * effAttrValue)
+            effPointDict[effKey] = effPointDict.get(effKey, 0) + addFreePointTotal
+        elif effType == 56: # 等级每级增加X点灵根
+            playerLV = curPlayer.GetLV()
+            addFreePointTotal = int(playerLV / effCond * effAttrValue)
+            effPointDict[effKey] = effPointDict.get(effKey, 0) + addFreePointTotal
+            
+    return
+
 
 #// B2 18 古宝升级 #tagCMGubaoLVUp
 #
@@ -762,6 +838,21 @@
         if attrID > 0 and addAttrValue > 0:
             effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
             
+    #57    坐骑基础属性提升x%
+    elif effType == 57:
+        customAttrDict = PlayerControl.GetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse)[2]
+        horseBaseAttrInfo = customAttrDict.get("horseBaseAttrInfo", {})
+        #GameWorld.DebugLog("    effID=%s,effType=%s,horseBaseAttrInfo=%s,effAttrInfo=%s" % (effID, effType, horseBaseAttrInfo, effAttrInfo))
+        __addStarEffFuncAttr(ipyData, effAttrInfo, horseBaseAttrInfo, effAttrValue)
+       
+    #58    坐骑每x级+xx属性                   x级
+    elif effType == 58:
+        horseLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorserLV)
+        addAttrValue = int(horseLV / effCond * effAttrValue)
+        #GameWorld.DebugLog("    effID=%s,effType=%s,effCond=%s,horseLV=%s,attrID=%s,addAttrValue=%s" % (effID, effType, effCond, horseLV, attrID, addAttrValue))
+        if attrID > 0 and addAttrValue > 0:
+            effAttrInfo[attrID] = effAttrInfo.get(attrID, 0) + addAttrValue
+            
     return
 
 def __addStarEffFuncAttr(ipyData, effAttrInfo, funcAttrInfo, effAttrValue):
@@ -901,7 +992,7 @@
     else:
         syncIDList = [gubaoID]
         
-    syncEffTypeList = [effType] if effType else GubaoEffTtemIypeList
+    syncEffTypeList = [effType] if effType else NeedGubaoItemEffValueTypeList
     
     itemEffInfoList = []
     for gubaoID in syncIDList:

--
Gitblit v1.8.0