From 1ea73e1885835466265ce788d93556b7030ee0e8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 30 十二月 2018 18:42:00 +0800
Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(GM工具增加子服服务器维护,文字翻译版)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py |  127 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 122 insertions(+), 5 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
index bc67c13..d2cc301 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRefineStove.py
@@ -30,8 +30,10 @@
 import EventShell
 import PlayerActivity
 import PlayerFairyCeremony
+import PlayerVip
 
 import copy
+
 
 ##功能开启
 def DoRefineStoveOpen(curPlayer):
@@ -43,8 +45,13 @@
 ##登录处理
 def DoOnLogin(curPlayer, tick):
     Sycn_AlchemyMsg(curPlayer)
+    Sycn_AlchemyPrayMsg(curPlayer)
     return
 
+def OnDay(curPlayer):
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyPrayCnt, 0)
+    Sycn_AlchemyPrayMsg(curPlayer)
+    return
 
 #// A5 76 玩家炼丹 #tagCMPlayerRefine
 #
@@ -191,7 +198,12 @@
         GameWorld.DebugLog("更新炼丹产出特殊物品次数: makeItemID=%s,outputCount=%s" % (makeItemID, outputCount), playerID)
         
     #给物品
-    ItemControler.GivePlayerItem(curPlayer, makeItemID, itemCount, delItemHasBind, [IPY_GameWorld.rptItem], 
+    notBindItemList = IpyGameDataPY.GetFuncEvalCfg("SpecialAlchemy", 4) # 固定不绑定的物品
+    if makeItemID in notBindItemList:
+        makeItemBind = False
+    else:
+        makeItemBind = delItemHasBind
+    ItemControler.GivePlayerItem(curPlayer, makeItemID, itemCount, makeItemBind, [IPY_GameWorld.rptItem], 
                                  event=[ChConfig.ItemGive_Refine, False, {}])
     
     Sycn_AlchemyMsg(curPlayer, makeItemID)
@@ -245,18 +257,25 @@
     GameWorld.DebugLog("增加炼丹经验: alchemyLV=%s,addExp=%s,alchemyExp=%s" % (alchemyLV, addExp, alchemyExp), curPlayer.GetPlayerID())
     
     isLVUp = False
-    stoveIpyData = IpyGameDataPY.GetIpyGameData("RefineStove", alchemyLV)
+    stoveIpyData = IpyGameDataPY.GetIpyGameDataNotLog("RefineStove", alchemyLV)
     while stoveIpyData and stoveIpyData.GetUpNeedExp() and alchemyExp >= stoveIpyData.GetUpNeedExp():
-        alchemyExp -= stoveIpyData.GetUpNeedExp()
+        needExp = stoveIpyData.GetUpNeedExp()
+        nextLV = alchemyLV + 1
+        stoveIpyData = IpyGameDataPY.GetIpyGameDataNotLog("RefineStove", nextLV)
+        if not stoveIpyData:
+            GameWorld.DebugLog("没有下一级数据了,已满级!不可升级!", curPlayer.GetPlayerID())
+            break
+        
+        alchemyExp -= needExp
         alchemyLV += 1
         GameWorld.DebugLog("    炼丹升级: alchemyLV=%s,alchemyExp=%s" % (alchemyLV, alchemyExp), curPlayer.GetPlayerID())
-        stoveIpyData = IpyGameDataPY.GetIpyGameDataNotLog("RefineStove", alchemyLV)
         isLVUp = True
         EventShell.EventRespons_RefineStoveUp(curPlayer, alchemyLV)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyExp, alchemyExp)
     if not isLVUp:
         return False
     
+    GameWorld.DebugLog("升级后剩余经验: %s" % alchemyExp, curPlayer.GetPlayerID())
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyLV, alchemyLV)
     PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_AlchemyLV, alchemyLV)
     
@@ -291,8 +310,9 @@
 def CalcStoveAttr(curPlayer):
     # 果实加成
     allAttrYaoList = [{} for _ in range(4)]
-    PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrYaoList, ShareDefine.Def_AttrFruitFunc_Stove)
+    fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrYaoList, ShareDefine.Def_AttrFruitFunc_Stove)
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_StoveYao, allAttrYaoList)
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_StoveYao, fightPowerEx)
     
     allAttrList = [{} for _ in range(4)]
     alchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
@@ -305,3 +325,100 @@
     
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stove, allAttrList)
     return
+
+g_needAlchemyLVDict = {}
+def GetIsCanOutByAlchemyLV(curPlayer, itemID):
+    #判断当前丹炉等级是否可产出该丹药
+    global g_needAlchemyLVDict
+    if not g_needAlchemyLVDict:
+        ipyMgr = IpyGameDataPY.IPY_Data()
+        for i in xrange(ipyMgr.GetAlchemyCount()):
+            ipyData = ipyMgr.GetAlchemyByIndex(i)
+            needAlchemyLV = ipyData.GetNeedAlchemyLV()
+            itemList = ipyData.GetAlchemyItem()
+            for itemInfo in itemList:
+                g_needAlchemyLVDict[itemInfo[1]] = needAlchemyLV
+        for i in xrange(ipyMgr.GetAlchemySpecCount()):
+            ipyData = ipyMgr.GetAlchemySpecByIndex(i)
+            needAlchemyLV = ipyData.GetNeedAlchemyLV()
+            itemList = ipyData.GetAlchemyItem()
+            for itemInfo in itemList:
+                g_needAlchemyLVDict[itemInfo[1]] = needAlchemyLV
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV) >= g_needAlchemyLVDict.get(itemID, 0)
+
+
+#// A5 14 祈福丹药 #tagCMPrayElixir
+#
+#struct    tagCMPrayElixir
+#
+#{
+#    tagHead        Head;
+#};
+def PlayerPrayElixir(index, clientPack, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    prayCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyPrayCnt)
+    limitCnt = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_PrayElixir)
+    if prayCnt >= limitCnt:
+        GameWorld.DebugLog('今日祈福丹药次数已满!prayCnt=%s'%prayCnt)
+        return
+    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, 1) 
+    if not packSpace:
+        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
+        return
+    
+    alchemyItemList = IpyGameDataPY.GetFuncEvalCfg('GodAlchemy')
+    
+    newItemInfoList = []
+    for itemInfo in alchemyItemList:
+        itemID = itemInfo[1]
+        if not GetIsCanOutByAlchemyLV(curPlayer, itemID):
+            #GameWorld.DebugLog('祈福丹药,炼丹等级未达到,移除产出库!itemID=%s'%itemID)
+            continue
+        if PlayerAttrFruit.IsFruitEatFull(curPlayer, itemID):
+            #GameWorld.DebugLog('祈福丹药,使用次数已满,移除产出库!itemID=%s'%itemID)
+            continue
+        newItemInfoList.append(itemInfo)
+    if not newItemInfoList:
+        GameWorld.DebugLog('祈福丹药,没有丹药可产出!!')
+        return
+    
+    makeItemInfo = GameWorld.GetResultByWeightList(newItemInfoList)
+    if not makeItemInfo:
+        GameWorld.DebugLog("祈福丹药, 结果错误!")
+        return
+    
+    makeItemID, itemCount = makeItemInfo
+    makeItemData = GameWorld.GetGameData().GetItemByTypeID(makeItemID)
+    if not makeItemData:
+        return
+    
+    costMoney = IpyGameDataPY.GetFuncCfg('GodAlchemy', 2)
+    if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney, ChConfig.Def_Cost_AlchemyPray):
+        return
+    #给物品
+    ItemControler.GivePlayerItem(curPlayer, makeItemID, itemCount, True, [IPY_GameWorld.rptItem], 
+                                 event=[ChConfig.ItemGive_Refine, False, {}])
+    #GameWorld.DebugLog('makeItemID=%s,newItemInfoList=%s'%(makeItemID, newItemInfoList))
+    
+    
+    #紫色及以上全服广播
+    notifyColor = IpyGameDataPY.GetFuncCfg("AlchemyNotify", 1)
+    needNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 2)
+    notNotifyItemIDList = IpyGameDataPY.GetFuncEvalCfg("AlchemyNotify", 3)
+    if makeItemID not in notNotifyItemIDList and (makeItemID in needNotifyItemIDList or makeItemData.GetItemColor() >= notifyColor):
+        PlayerControl.WorldNotify(0, "BlastfurnaceBlessing", [curPlayer.GetPlayerName(), makeItemID])
+        
+    #更新次数
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlchemyPrayCnt, prayCnt+1)
+    Sycn_AlchemyPrayMsg(curPlayer, makeItemID)
+    return
+
+def Sycn_AlchemyPrayMsg(curPlayer, itemID=0):
+    #祈福丹药结果
+    if not itemID and not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_RefineStove):
+        return
+    pack = ChPyNetSendPack.tagMCPrayElixirResult()
+    pack.PrayCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyPrayCnt)
+    pack.ItemID = itemID
+    NetPackCommon.SendFakePack(curPlayer, pack)
+    return
\ No newline at end of file

--
Gitblit v1.8.0