From fd929faf55ab49f558ee2f7b5ef9adcba0de82c6 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 30 八月 2018 19:26:25 +0800 Subject: [PATCH] fix:3101 【后端】仙盟贡献物品效果 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py | 77 +++++++++++++++++++++++++++++++++----- 1 files changed, 67 insertions(+), 10 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py index f7bbd52..9c3d2dd 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py @@ -26,6 +26,7 @@ import ChConfig import PlayerSuccess import PlayerWing +import PlayerDogz import random import math @@ -101,13 +102,21 @@ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) wingItemExpInfo = None #材料翅膀精炼信息 + dogzEquipPlusExp = 0 #神兽装备强化熟练度 # 检查不固定消耗道具 if unfixedItemIDList: - unfixedItemCostInfo = __CheckUnfixedItem(playerID, compoundID, makeItemData, itemPack, unfixedItemIndexList, + unfixedItem = GameWorld.GetGameData().GetItemByTypeID(unfixedItemIDList[0]) + if not unfixedItem: + return + if ItemCommon.GetIsDogzEquip(unfixedItem): + unfixedItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem) + else: + unfixedItemPack = itemPack + unfixedItemCostInfo = __CheckUnfixedItem(playerID, compoundID, makeItemData, unfixedItemPack, unfixedItemIndexList, unfixedItemIDList, needUnfixedItemCount) if not unfixedItemCostInfo: return - unfixedItemCostList, wingItemExpInfo = unfixedItemCostInfo + unfixedItemCostList, wingItemExpInfo, dogzEquipPlusExp = unfixedItemCostInfo # 检查固定消耗道具 if fixedItemIDList: @@ -133,7 +142,7 @@ # 扣不固定消耗物品 if unfixedItemIDList: bindUnfixedIndexList, unbindUnfixedIndexList = unfixedItemCostList - hasBind = ItemCommon.ReduceItem(curPlayer, itemPack, bindUnfixedIndexList + unbindUnfixedIndexList, needUnfixedItemCount, + hasBind = ItemCommon.ReduceItem(curPlayer, unfixedItemPack, bindUnfixedIndexList + unbindUnfixedIndexList, needUnfixedItemCount, False, ChConfig.ItemDel_ItemCompound, drDict) makeItemBind = True if hasBind else makeItemBind @@ -174,7 +183,7 @@ # 合成成功 if GameWorld.CanHappen(totalSuccRate, ShareDefine.Def_MaxRateValue): GameWorld.DebugLog("合成成功: makeItemID=%s,compoundCnt=%s,compoundBindCnt=%s" % (makeItemID, compoundCnt, compoundBindCnt), playerID) - GiveNewCompoundItem(curPlayer, makeItemID, compoundCnt, compoundBindCnt, wingItemExpInfo, msgMark) + GiveNewCompoundItem(curPlayer, makeItemID, compoundCnt, compoundBindCnt, wingItemExpInfo, dogzEquipPlusExp, msgMark) #成功合成1个物品成就 PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_CompoundItemEx, compoundCnt, [makeItemID]) #合成X阶X颜色X星级以上装备 @@ -186,6 +195,7 @@ # 合成失败 else: GameWorld.DebugLog("合成失败!") + __SendDogzEquipRemainExpMail(playerID, dogzEquipPlusExp, False) ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitItemCompound, ChConfig.Def_ComposeState_Fail, 0) #curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitItemCompound, ChConfig.Def_ComposeState_Fail) @@ -198,6 +208,7 @@ def __CheckUnfixedItem(playerID, compoundID, makeItemData, itemPack, unfixedItemIndexList, unfixedItemIDList, needUnfixedItemCount): ## 检查不固定消耗道具, 只要客户端提交的数据有不符合要求的,则直接返回 None wingItemExpInfo = None + dogzEquipPlusExp = 0 unfixedItemTotalCount = 0 unfixedItemCostList = [[], []] # [[绑定索引], [非绑定索引]] maxPackCount = itemPack.GetCount() @@ -223,13 +234,19 @@ #记录翅膀精炼值 if curItem.GetType() == ChConfig.Def_ItemType_retWing: wingItemExpInfo = PlayerWing.GetWingItemChangeExp(curItem, ItemCommon.GetItemClassLV(makeItemData)) - + elif ItemCommon.GetIsDogzEquip(curItem): + equipExpEff = ItemCommon.GetItemEffectByEffectID(curItem, ChConfig.Def_Effect_DogzEquipPlusExp) + baseExp = 0 if not equipExpEff else equipExpEff.GetEffectValue(0) + plusExp = curItem.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 1) + dogzEquipPlusExp += (baseExp + plusExp) + GameWorld.DebugLog(" 神兽合成材料: index=%s,itemID=%s,baseExp=%s,plusExp=%s" % (index, itemID, baseExp, plusExp)) + if unfixedItemTotalCount < needUnfixedItemCount: GameWorld.Log("不固定消耗道具不足,无法合成!ID=%s,unfixedItemIDList=%s,needUnfixedItemCount=%s > unfixedItemTotalCount=%s" % (compoundID, unfixedItemIDList, needUnfixedItemCount, unfixedItemTotalCount), playerID) return - return unfixedItemCostList, wingItemExpInfo + return unfixedItemCostList, wingItemExpInfo, dogzEquipPlusExp def __CheckFixedItem(playerID, compoundID, itemPack, fixedItemIndexList, fixedItemIDList, fixedItemCountList, compoundCnt): @@ -429,13 +446,13 @@ # @param newItem: 新物品 # @param itemCount: 合成数量 # @return None -def GiveNewCompoundItem(curPlayer, newItemID, itemCount, compoundBindCnt, wingItemExpInfo, msgMark): +def GiveNewCompoundItem(curPlayer, newItemID, itemCount, compoundBindCnt, wingItemExpInfo, dogzEquipPlusExp, msgMark): compoundUnBindCnt = itemCount - compoundBindCnt if compoundBindCnt > 0: - userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundBindCnt, True, wingItemExpInfo) + userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundBindCnt, True, wingItemExpInfo, dogzEquipPlusExp) if compoundUnBindCnt > 0: - userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundUnBindCnt, False, wingItemExpInfo) + userData = __GivePlayerCompoundItem(curPlayer, newItemID, compoundUnBindCnt, False, wingItemExpInfo, dogzEquipPlusExp) if userData == None: return @@ -452,7 +469,7 @@ #curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitItemCompound, ChConfig.Def_ComposeState_Sucess) return True -def __GivePlayerCompoundItem(curPlayer, newItemID, itemCount, isBind, wingItemExpInfo): +def __GivePlayerCompoundItem(curPlayer, newItemID, itemCount, isBind, wingItemExpInfo, dogzEquipPlusExp): playerID = curPlayer.GetPlayerID() curSingleItem = ItemControler.GetOutPutItemObj(newItemID, itemCount, isBind) if not curSingleItem: @@ -475,6 +492,15 @@ if wingFinalExp:#继承翅膀精炼值 PlayerWing.WingProgressUP(curSingleItem, wingFinalExp, materialItemDict) + if dogzEquipPlusExp:#继承神兽装备熟练度 + dogzEquipLV, dogzEquipExp = PlayerDogz.GetDogzEquipPlusLVExpInfo(curSingleItem.GetItemColor(), curSingleItem.GetEquipPlace(), dogzEquipPlusExp) + curSingleItem.AddUserAttr(ShareDefine.Def_IudetDogzEquipPlus, dogzEquipLV) + curSingleItem.AddUserAttr(ShareDefine.Def_IudetDogzEquipPlus, dogzEquipExp) + remainExp = max(0, dogzEquipPlusExp - dogzEquipExp) + GameWorld.DebugLog("合成神兽装备成功, dogzEquipLV=%s,dogzEquipExp=%s,remainExp=%s,总EXP=%s" + % (dogzEquipLV, dogzEquipExp, remainExp, dogzEquipPlusExp), playerID) + __SendDogzEquipRemainExpMail(playerID, remainExp, True) + userData = curSingleItem.GetUserData() if not ItemControler.PlayerItemControler(curPlayer).PutInItem(IPY_GameWorld.rptItem, curSingleItem, event=[ChConfig.ItemGive_ItemCompound, False, {}]): @@ -484,3 +510,34 @@ return userData +def __SendDogzEquipRemainExpMail(playerID, remainExp, isSucc): + if not remainExp: + return + + expItemID = IpyGameDataPY.GetFuncCfg("DogzAssist", 5) + itemData = GameWorld.GetGameData().GetItemByTypeID(expItemID) + if not itemData: + return + + effect = ItemCommon.GetItemEffectByEffectID(itemData, ChConfig.Def_Effect_DogzEquipPlusExp) + if not effect: + GameWorld.ErrLog("神兽装备合成返回熟练度物品ID错误! expItemID=%s,remainExp=%s" % (expItemID, remainExp), playerID) + return + baseExp = effect.GetEffectValue(0) + if not baseExp: + GameWorld.ErrLog("神兽装备合成返回熟练度物品ID错误! expItemID=%s,baseExp=%s,remainExp=%s" + % (expItemID, baseExp, remainExp), playerID) + return + + giveItemCount = int(remainExp/baseExp) + if giveItemCount <= 0: + return + + mailTypeKey = "DogzComposeSuc" if isSucc else "DogzComposeLose" + GameWorld.DebugLog("合成神兽装备, 返还强化熟练度=%s,baseExp=%s,expItemID=%s,giveItemCount=%s" + % (remainExp, baseExp, expItemID, giveItemCount), playerID) + + isBind = 1 + PlayerControl.SendMailByKey(mailTypeKey, [playerID], [[expItemID, giveItemCount, isBind]]) + return + -- Gitblit v1.8.0