From a81d36e5c709d7d4465be2ddaed2bd58a6132be0 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 04 六月 2019 10:50:29 +0800
Subject: [PATCH] 6501 仙宝寻主任务接口修改

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py |  128 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 112 insertions(+), 16 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py
index 21f344f..6be7530 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAttrFruit.py
@@ -39,6 +39,7 @@
 import PlayerPet
 import PlayerRefineStove
 import PlayerSuccess
+import SkillShell
 
 (
 Def_LimitType_Cnt, # 按个数限制
@@ -98,7 +99,7 @@
         if not ipyData:
             continue
         
-        maxEatCnt = ipyData.GetMaxUseCnt()
+        maxEatCnt = GetMaxEatCnt(curPlayer, itemID)
         eatCntKey = ChConfig.Def_PDict_AttrFruitEatCnt % itemID
         limitType = Def_LimitType_Cnt
         if limitType == Def_LimitType_Attr:
@@ -121,6 +122,7 @@
     if totalMoney:
         addDataDict = {"recycleItemList":recycleItemList}
         PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Danjing, totalMoney, ChConfig.Def_GiveMoney_UseItem, addDataDict)
+        curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitRecycleAttrFruit, 1)
     return
 
 
@@ -198,7 +200,6 @@
     
     # 刷新属性
     __RefreshAttr(curPlayer, funcIndex)
-    
     return True, hasUseCnt
 
 ## 玩家使用属性果实
@@ -215,7 +216,7 @@
 
     funcIndex = ipyData.GetFuncID()
     limitType = Def_LimitType_Cnt
-    maxEatCnt = ipyData.GetMaxUseCnt()
+    maxEatCnt = GetMaxEatCnt(curPlayer, itemID)
     
     if funcIndex not in ShareDefine.Def_AttrFruitFuncList:
         GameWorld.ErrLog("该属性果实功能未开放!funcIndex=%s"%funcIndex)
@@ -262,7 +263,21 @@
     if hasUseCnt <= 0:
         return DefaultReturn
     PlayerControl.NomalDictSetProperty(curPlayer, eatCntKey, eatCnt)
-    
+    if funcIndex == ShareDefine.Def_AttrFruitFunc_Stove:
+        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseStoveBylv, hasUseCnt, [item.GetLV()])
+        
+    effect = item.GetEffectByIndex(0)
+    effID = effect.GetEffectID()
+    ## 特殊属性ID处理,此属性ID做一次性处理,不做属性计算
+    if effID == ShareDefine.Def_Effect_FreePoint:
+        effValue = effect.GetEffectValue(0)
+        addFreePoint = effValue * hasUseCnt
+        freePoint = curPlayer.GetFreePoint()
+        updFreePoint = freePoint + addFreePoint
+        curPlayer.SetFreePoint(updFreePoint)
+        GameWorld.DebugLog("丹药增加自由属性点: freePoint=%s,addFreePoint=%s(%s*%s),updFreePoint=%s" 
+                           % (freePoint, addFreePoint, effValue, hasUseCnt, updFreePoint))
+        
     ItemCommon.DelItem(curPlayer, item, hasUseCnt, True, ChConfig.ItemDel_AttrFruit)
     return addValue, hasUseCnt
 
@@ -286,22 +301,31 @@
 def __AddFruitAttr(curPlayer, fruitItemID, funcIndex, addValue):
     
     if addValue < 1:
-        return
+        return []
     
     itemData = GameWorld.GetGameData().GetItemByTypeID(fruitItemID)
     if not itemData:
-        return
+        return []
     
     
     limitType = Def_LimitType_Cnt #默认按个数
-
+    
+    # 增加附加战力,仅按个数时有效
+    fightPowerExfigKey = ChConfig.Def_PlayerKey_FruitFightPowerEx % (funcIndex)
+    fightPowerEx = curPlayer.GetDictByKey(fightPowerExfigKey)
+    fruitIpyData = GetAttrFruitIpyData(fruitItemID)
+    addFightPowerEx = 0 if not fruitIpyData else fruitIpyData.GetFightPowerEx()
+    fightPowerEx = fightPowerEx + addFightPowerEx * addValue
+    curPlayer.SetDict(fightPowerExfigKey, fightPowerEx)
+    GameWorld.DebugLog("    Add funcIndex=%s,addFightPowerEx=%s,addValue=%s,fightPowerEx=%s" % (funcIndex, addFightPowerEx, addValue, fightPowerEx))
+    attrIDList = []
     for i in range(itemData.GetEffectCount()):
         curEffect = itemData.GetEffectByIndex(i)
         effectID = curEffect.GetEffectID()
         
-        if not effectID or effectID not in ChConfig.ItemEffect_AttrDict:
+        if not effectID or effectID not in ChConfig.ItemEffect_AttrDict or effectID == ShareDefine.Def_Effect_FreePoint:
             continue
-                    
+        attrIDList.append(effectID)
         attrKey = ChConfig.Def_PlayerKey_FruitAttr % (funcIndex, effectID)
         curValue = curPlayer.GetDictByKey(attrKey)
         effValueA = curEffect.GetEffectValue(0)
@@ -314,7 +338,7 @@
         curPlayer.SetDict(attrKey, updValue)
         GameWorld.DebugLog("    Add funcIndex=%s,effID=%s,curValue=%s,effA=%s,effB=%s,count=%s,updV=%s" 
                            % (funcIndex, effectID, curValue, effValueA, effValueB, addValue, updValue))
-    return
+    return attrIDList
 
 ## 加载果实增加的属性缓存,一般是登录或切地图后
 # @param curPlayer
@@ -366,8 +390,9 @@
         #GameWorld.DebugLog("    effectID=%s,addValue=%s" % (effectID, addValue))
         PlayerControl.CalcAttrDict_Type(effectID, addValue, allAttrList)
 
-    #GameWorld.DebugLog("    有果实属性 allAttrList=%s" % str(allAttrList))
-    return
+    fightPowerEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FruitFightPowerEx % (funcIndex))
+    #GameWorld.DebugLog("    有果实属性funcIndex=%s,fightPowerEx=%s,allAttrList=%s" % (funcIndex, fightPowerEx, allAttrList))
+    return fightPowerEx
     
 
 ## 统计百分比属性对功能内层的属性增加
@@ -383,7 +408,7 @@
     
     #[属性索引, 是否基础属性,(非)线性]
     attrInfo = ChConfig.ItemEffect_AttrDict.get(effPerID, [])
-    if attrInfo == []:
+    if attrInfo is []:
         return
     
     addAttrList = attrInfo[0]
@@ -408,12 +433,12 @@
 #  @param curPlayer 
 #  @param fruitItemID 
 #  @return None
-def Sync_AttrFruitEatCnt(curPlayer, fruitItemIDList=[]):
+def Sync_AttrFruitEatCnt(curPlayer, fruitItemIDList=None):
     
     eatPack = ChPyNetSendPack.tagMCAttrFruitEatCntList()
     eatPack.Clear()
     eatPack.EatCntList = []
-    if fruitItemIDList == []:
+    if fruitItemIDList is None:
         itemidList = []
         ipyDataMgr = IpyGameDataPY.IPY_Data()
         maxCnt = ipyDataMgr.GetAttrFruitCount()
@@ -433,7 +458,8 @@
         eatCntPack.Clear()
         eatCntPack.ItemID = fruitItemID
         eatCntPack.EatCnt = curPlayer.NomalDictGetProperty(eatCntKey)
-        #eatCntPack.AddAttr = curPlayer.NomalDictGetProperty(addValueKey)
+        eatCntPack.ItemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % fruitItemID)
+        eatCntPack.ItemBreakCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitItemBreakCnt % fruitItemID)
         eatPack.EatCntList.append(eatCntPack)
     
     eatPack.count = len(eatPack.EatCntList)
@@ -465,3 +491,73 @@
         
     return eatCntDict
 
+def IsFruitEatFull(curPlayer, itemID):
+    #使用次数是否已满
+    maxEatCnt = GetMaxEatCnt(curPlayer, itemID)
+    eatCntKey = ChConfig.Def_PDict_AttrFruitEatCnt % itemID
+    limitType = Def_LimitType_Cnt
+    if limitType == Def_LimitType_Attr:
+        eatCntKey = ChConfig.Def_PDict_AttrFruitAddValue % itemID
+    eatCnt = curPlayer.NomalDictGetProperty(eatCntKey) # 已吃次数/属性值
+    if eatCnt >= maxEatCnt:
+        return True
+    return
+
+def GetMaxEatCnt(curPlayer, itemID):
+    ##获取果实最大可用个数
+    ipyData = GetAttrFruitIpyData(itemID)
+    if not ipyData:
+        return 0
+    maxEatCntDict = ipyData.GetMaxUseCnt()
+    realmLV = curPlayer.GetOfficialRank()
+    orderList = sorted(maxEatCntDict.keys(), reverse=True)
+    maxEatCnt = 0
+    for order in orderList:
+        if realmLV >= order:
+            maxEatCnt = maxEatCntDict[order]
+            break
+    addItemUseCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID)
+    maxEatCnt += addItemUseCnt
+    return maxEatCnt
+
+
+#// A3 17 增加果实使用上限 #tagCMAddFruitUseLimit
+#
+#struct    tagCMAddFruitUseLimit
+#{
+#    tagHead        Head;
+#    DWORD        ItemID;        //果实物品ID
+#};
+def OnAddFruitUseLimit(index, packData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    itemID = packData.ItemID
+    ipyData = GetAttrFruitIpyData(itemID)
+    if not ipyData:
+        return
+    addItemInfoList = ipyData.GetAddItemInfo()
+    if not addItemInfoList:
+        return
+    itemBreakCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitItemBreakCnt % itemID)
+    itemAddUseCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID)
+    needUseCnt = canUpCnt = 0
+    for breakCnt, useCnt, upCnt in addItemInfoList:
+        if itemBreakCnt >= breakCnt:
+            continue
+        needUseCnt, canUpCnt = useCnt, upCnt
+        break
+    if not needUseCnt:
+        return
+
+    needItemID = IpyGameDataPY.GetFuncCfg('AlchemyOverLimit')
+    if itemAddUseCnt + canUpCnt> ChConfig.Def_UpperLimit_DWord:
+        return
+    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+    enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(needItemID, itemPack, needUseCnt)
+    if not enough:
+        return
+    ItemCommon.ReduceItem(curPlayer, itemPack, indexList, needUseCnt, False, "AddFruitUseLimit")
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AttrFruitAddItemCnt % itemID, itemAddUseCnt+canUpCnt)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AttrFruitItemBreakCnt % itemID,
+                                       itemBreakCnt + 1)
+    Sync_AttrFruitEatCnt(curPlayer, [itemID])
+    return

--
Gitblit v1.8.0