From 32004fc5071f6da69d8b9e0bfc4a3080d04f9f03 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期六, 22 十二月 2018 09:58:00 +0800
Subject: [PATCH] 5372 【后端】【1.4】聚魂副本开发(代码还原)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py | 78 +++++++++++++++++++++++++++-----------
1 files changed, 55 insertions(+), 23 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py
index 8a1e138..8aa7baf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGatherSoul.py
@@ -27,6 +27,7 @@
import IpyGameDataPY
import FormulaControl
import DataRecordPack
+import PlayerSuccess
g_GatherSoulLVExpDict = {} #经验缓存
g_gatherSoulLVAttrDict = {} #属性缓存
@@ -70,13 +71,13 @@
qualityPerDict = IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 2, {})
if itemColor in qualityPerDict:
exp *= float(qualityPerDict[itemColor])
-
- soulGrade = ipyData.GetSoulGrade()
- exp *= float(IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 4, {}).get(soulGrade, 1))
attrTypeCnt = len(ipyData.GetAttrType())
specialPer = IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 3, {}).get(attrTypeCnt, 1)
exp *= float(specialPer)
+
+ soulGrade = ipyData.GetSoulGrade()
+ exp *= float(IpyGameDataPY.GetFuncEvalCfg('GatherSoulLevelUp', 5, {}).get(soulGrade, 1))
return exp
@@ -221,6 +222,7 @@
RefreshGatherSoulAttr(curPlayer)
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
Sync_GatherSoulHoleInfo(curPlayer)
+ DoGatherSoulSuccessLogic(curPlayer)
return True
@@ -280,7 +282,7 @@
RefreshGatherSoulAttr(curPlayer)
PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
Sync_GatherSoulHoleInfo(curPlayer)
-
+ DoGatherSoulSuccessLogic(curPlayer)
GameWorld.DebugLog("聚魂升级!placeType=%s,placeIndex=%s,GatherSoulData=%s,updGatherSoulData=%s"
% (placeType, placeIndex, GatherSoulData, updGatherSoulData), playerID)
return
@@ -323,9 +325,9 @@
curEff = itemData.GetEffectByIndex(0)
soulDust = curEff.GetEffectValue(0)
else:
-
+ #先计算升级消耗的材料
soulDust = 0
- for lv in xrange(GatherSoulItemPlusLV + 1):
+ for lv in xrange(1, GatherSoulItemPlusLV + 1):
soulDust += GetGatherSoulNeedExp(GatherSoulItemID, lv)
#多属性的先拆解成单属性的聚魂
@@ -333,7 +335,11 @@
for itemID in soulidList:
giveMaterialDict[itemID] = giveMaterialDict.get(itemID, 0) + 1
needPackSpace += 1
-
+ if not soulidList and not soulSplinters and not soulCore:
+ #不能拆解的则要算0级的分解
+ soulDust += GetGatherSoulNeedExp(GatherSoulItemID, 0)
+
+
totalSoulSplinters += soulSplinters
totalSoulCore += soulCore
totalSoulDust += soulDust
@@ -357,30 +363,31 @@
PlayerControl.NotifyCode(curPlayer, 'hwj_20170807_1', [totalSoulCore, ShareDefine.TYPE_Price_SoulCore])
if giveMaterialDict:
- emptySpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptGatherSoul, 1)
+ emptySpace = ItemCommon.GetItemPackSpace(curPlayer, ShareDefine.rptGatherSoul, needPackSpace)
if emptySpace < needPackSpace:
- giveMaterialList = [[itemID, itemCnt, 1] for itemID, itemCnt in giveMaterialDict.items()]
+ giveMaterialList = [[itemID, itemCnt, 0] for itemID, itemCnt in giveMaterialDict.items()]
PlayerControl.SendMailByKey('JHBagFull1', [curPlayer.GetID()], giveMaterialList)
else:
- for itemID, itemCnt in giveMaterialDict.items:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [ShareDefine.rptGatherSoul])
- GameWorld.DebugLog("聚魂分解: isAuto=%s,PlaceIndexList=%s, delPlaceDict=%s" % (isAuto, placeList, delPlaceDict))
+ for itemID, itemCnt in giveMaterialDict.items():
+ ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [ShareDefine.rptGatherSoul])
+ GameWorld.DebugLog("聚魂分解: isAuto=%s,PlaceIndexList=%s, delPlaceDict=%s, giveMaterialDict=%s" % (isAuto, placeList, delPlaceDict, giveMaterialDict))
return
-def __GetGatherSoulSplitMaterial(gathersoulID, soulidList=[], soulSplinters=0, soulCore=0):
+def __GetGatherSoulSplitMaterial(gathersoulID):
##拆解多属性聚魂 返回单属性聚魂ID,材料
+ soulidList, soulSplinters, soulCore= [], 0, 0
compoundIpyData = IpyGameDataPY.GetIpyGameDataNotLog('GatherSoulCompound', gathersoulID)
if compoundIpyData:
materialList = compoundIpyData.GetNeedItem()
soulSplinters += compoundIpyData.GetNeedSoulSplinters()
soulCore += compoundIpyData.GetNeedSoulCore()
for itemID in materialList:
- soulIpyData = GetGatherSoulIpyData(itemID)
- if soulIpyData and len(soulIpyData.GetAttrType()) > 1:
- __GetGatherSoulSplitMaterial(itemID, soulidList, soulSplinters, soulCore)
- else:
- soulidList.append(itemID)
+# soulIpyData = GetGatherSoulIpyData(itemID)
+# if soulIpyData and len(soulIpyData.GetAttrType()) > 1:
+# __GetGatherSoulSplitMaterial(itemID, soulidList, soulSplinters, soulCore)
+# else:
+ soulidList.append(itemID)
return soulidList, soulSplinters, soulCore
@@ -439,14 +446,15 @@
GameWorld.DebugLog(' 聚魂合成 背包格子数量不足1个')
return
- costMoneyDict = {ShareDefine.TYPE_Price_SoulSplinters:ipyData.GeNeedSoulSplinters(),
- ShareDefine.TYPE_Price_SoulCore:ipyData.GeNeedSoulSplinters(), }
- for moneyType, costMoney in costMoneyDict:
+ costMoneyDict = {ShareDefine.TYPE_Price_SoulSplinters:ipyData.GetNeedSoulSplinters(),
+ ShareDefine.TYPE_Price_SoulCore:ipyData.GetNeedSoulCore(), }
+ for moneyType, costMoney in costMoneyDict.items():
if not PlayerControl.HaveMoney(curPlayer, moneyType, costMoney):
+ GameWorld.DebugLog('聚魂合成钱不够 moneyType=%s, costMoney=%s'%(moneyType, costMoney))
return
infoDict = {"TagItemID":tagItemID}
- for moneyType, costMoney in costMoneyDict:
+ for moneyType, costMoney in costMoneyDict.items():
PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_ItemProduce, infoDict)
totalPoint = 0
@@ -488,11 +496,35 @@
curItem.SetUserAttr(ShareDefine.Def_IudetGatherSoulLV, tagItemLV)
PlayerItemControler = ItemControler.PlayerItemControler(curPlayer)
PlayerItemControler.PutInItem(ShareDefine.rptGatherSoul, curItem, event=[ChConfig.ItemGive_ItemCompound, False, {'indexList1':indexList1, 'indexList2':indexList2, 'soulDust':totalPoint}])
-
+ GameWorld.DebugLog(' 聚魂合成 成功')
curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitGatherSoulCompound, 1)
return
+def DoGatherSoulSuccessLogic(curPlayer):
+ #聚魂成就处理
+ #清掉#镶嵌X枚X品质聚魂的成就信息
+ PlayerSuccess.ResetSuccessByType(curPlayer, ShareDefine.SuccType_InlayGatherSoul)
+ totalLV = 0
+ GatherSoulUnlockDict = IpyGameDataPY.GetFuncEvalCfg("GatherSoulHole", 1, {})
+ maxGatherSoulHole = len(GatherSoulUnlockDict)
+ for holeNum in xrange(maxGatherSoulHole):
+ GatherSoulData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GatherSoulHoleData % holeNum, 0)
+ if not GatherSoulData:
+ continue
+ GatherSoulItemID = ItemControler.GetGatherSoulItemID(GatherSoulData)
+ itemData = GameWorld.GetGameData().GetItemByTypeID(GatherSoulItemID)
+ if not itemData:
+ continue
+ if itemData.GetType() == ChConfig.Def_ItemType_GatherSoulCore:
+ continue
+ itemColor = itemData.GetItemColor()
+ GatherSoulItemPlusLV = ItemControler.GetGatherSoulItemPlusLV(GatherSoulData) + 1 #客户端1开始
+ totalLV += GatherSoulItemPlusLV
+ PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_InlayGatherSoul, 1, [itemColor])
+ PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_GatherSoulLvUp, totalLV)
+ return
+
def RefreshGatherSoulAttr(curPlayer):
allAttrList = [{} for _ in range(4)]
GatherSoulUnlockDict = IpyGameDataPY.GetFuncEvalCfg("GatherSoulHole", 1, {})
--
Gitblit v1.8.0