From b8cdfd7384aec5a3999d2687cbd078b19ec1a975 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 22 三月 2019 10:24:25 +0800
Subject: [PATCH] 6307 【后端】【2.0】多套装备开发单(洗炼升级)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 286 +++++++-------------------------------------------------
1 files changed, 39 insertions(+), 247 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index e074b79..73e4aa7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -376,8 +376,7 @@
if isAuctionItem:
if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemID):
- curSingleItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
- curSingleItem.SetIsBind(1)
+ ItemControler.SetIsAuctionItem(curSingleItem, isAuctionItem)
else:
GameWorld.ErrLog("拍卖物品表不存在该ID!创建拍品失败,默认转为非拍品!itemID=%s" % itemID)
@@ -427,7 +426,7 @@
if isUpdateGS:
MakeEquipGS(curItem)
elif isRoleItem:
- curItem.SetIsBind(curItem.GetIsBind()) # 为了触发物品同步
+ curItem.SetCount(curItem.GetCount()) # 为了触发物品同步
return
def MakeEquipGS(curItem):
@@ -563,7 +562,7 @@
# @return True or False
# @remarks 函数详细说明.
def CheckItemByEffectID(curPlayer, curItem, effectList):
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
return False
if not ItemControler.CheckItemUseLV(curPlayer, curItem, False):
@@ -624,7 +623,7 @@
for i in range(backPack.GetCount()):
curItem = backPack.GetAt(i)
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
if curItem.GetItemTypeID() != findItemID:
@@ -909,32 +908,15 @@
return
#---------------------------------------------------------------------
-#此函数验证当前职业阶可用(向下兼容),同CheckJob区分使用
-def JobUseable(curPlayer, curItem):
- '''判断物品是否职业可用
- 物品表中职业限制规则: 0为通用;非0百位代表职业,十位和个位为职业阶数, 职业阶向下兼容,高阶可使用低阶物品
- '''
- itemJobLimit = curItem.GetJobLimit()
- if not itemJobLimit:
- return True
-
- # 取消限制的物品
- if curItem.GetUserAttr(ShareDefine.Def_IudetCancelUseLimit) == 1:
- return CheckJob(curPlayer, curItem)
-
- if curPlayer.GetJob() == itemJobLimit / 100 and PlayerControl.GetJobRank(curPlayer) >= itemJobLimit % 100:
- return True
- return False
-
-#此函数验证当前职业系可用,同JobUseable区分使用
+#此函数验证当前职业系可用
def CheckJob(curPlayer, curItem):
'''判断物品是否职业系可用
- 物品表中职业限制规则: 0为通用;非0百位代表职业,十位和个位为职业阶数, 职业阶向下兼容,高阶可使用低阶物品
+ 物品表中职业限制规则: 0为通用;非0百位代表职业
'''
itemJobLimit = curItem.GetJobLimit()
if not itemJobLimit:
return True
- if curPlayer.GetJob() == itemJobLimit / 100:
+ if curPlayer.GetJob() == itemJobLimit:
return True
return False
@@ -1005,22 +987,6 @@
return isExpireItem, remainingTime
return isExpireItem, remainingTime
-
-##检查该物品是否合法,类型验证
-# @param curItem 物品实例
-# @param checkType 物品类型
-# @return 布尔值(物品是否合法)
-# @remarks 检查该物品是否合法,类型验证
-def CheckItemByType(curItem, checkType):
- #验证材料
- if not CheckItemCanUse(curItem):
- return False
-
- #类型不符合
- if curItem.GetType() != checkType:
- return False
-
- return True
## 检查装备是否有镶嵌宝石
# @param curItem 装备对象
@@ -1198,7 +1164,7 @@
for i in range(curItemPack.GetCount()):
findItem = curItemPack.GetAt(i)
- if not CheckItemCanUse(findItem):
+ if not CheckItemCanUse(findItem) or ItemControler.GetIsAuctionItem(findItem):
continue
#不使用绑定的材料
@@ -1241,7 +1207,7 @@
for i in range(curItemPack.GetCount()):
curItem = curItemPack.GetAt(i)
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
#不使用绑定的材料
@@ -1280,7 +1246,7 @@
for i in range(curItemPack.GetCount()):
curItem = curItemPack.GetAt(i)
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
if curItem.GetItemTypeID() != findItemID:
@@ -1322,7 +1288,7 @@
for i in range(itemPack.GetCount()):
curItem = itemPack.GetAt(i)
#过滤不符合其他条件的物品
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
if curItem.GetItemTypeID() != findItemID:
@@ -1364,7 +1330,7 @@
for i in range(itemPack.GetCount()):
curItem = itemPack.GetAt(i)
#过滤不符合其他条件的物品
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
if curItem.GetItemTypeID() != findItemID:
@@ -1410,7 +1376,7 @@
for i in range(itemPack.GetCount()):
curItem = itemPack.GetAt(i)
#过滤不符合其他条件的物品
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
if curItem.GetItemTypeID() != findItemID:
@@ -1454,7 +1420,7 @@
curPack = curPlayer.GetItemManager().GetPack(packType)
for i in range(0, curPack.GetCount()):
curItem = curPack.GetAt(i)
- if not curItem:
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
if curItem.GetItemTypeID() != itemID:
@@ -1557,7 +1523,7 @@
for i in xrange(itemPack.GetCount()):
curItem = itemPack.GetAt(i)
#过滤不符合其他条件的物品
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
curItemID = curItem.GetItemTypeID()
if curItemID not in costItemDict:
@@ -1661,7 +1627,7 @@
for index in range(0, itemPack.GetCount()):
item = itemPack.GetAt(index)
- if not CheckItemCanUse(item):
+ if not CheckItemCanUse(item) or ItemControler.GetIsAuctionItem(item):
continue
itemTypeID = item.GetItemTypeID()
@@ -1692,19 +1658,20 @@
# @remarks 函数详细说明.
def DoLogic_ItemBindType(curPlayer, curItem, bindType):
#固定不绑定
- if bindType == ChConfig.Def_BindType_NoBind:
- return
-
- #不处理已经绑定的物品
- if curItem.GetIsBind():
- return
- #不是这个功能的绑定类型
- if curItem.GetBindType() != bindType:
- return
- if curItem.GetBindType() == ChConfig.Def_BindType_DoEquipBind:
- pass
-
- ItemControler.SetItemIsBind(curItem, True)
+ #拍品去除绑定逻辑,暂屏蔽
+# if bindType == ChConfig.Def_BindType_NoBind:
+# return
+#
+# #不处理已经绑定的物品
+# if curItem.GetIsBind():
+# return
+# #不是这个功能的绑定类型
+# if curItem.GetBindType() != bindType:
+# return
+# if curItem.GetBindType() == ChConfig.Def_BindType_DoEquipBind:
+# pass
+#
+# ItemControler.SetItemIsBind(curItem, True)
return True
#---------------------------------------------------------------------
@@ -1861,7 +1828,7 @@
curItem = curItemPack.GetAt(i)
#检查物品
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
effect = curItem.GetEffectByIndex(0)
@@ -2028,13 +1995,14 @@
if not curItem or curItem.IsEmpty():
return {}
+ isAuctionItem = ItemControler.GetIsAuctionItem(curItem)
if not CheckItemIsEquip(curItem):
- return [curItem.GetItemTypeID(), curItem.GetCount(), curItem.GetIsBind()]
+ return [curItem.GetItemTypeID(), curItem.GetCount(), isAuctionItem]
addItemDict = {}
addItemDict['ItemID'] = curItem.GetItemTypeID()
addItemDict['Count'] = curItem.GetCount()
- addItemDict['IsAuctionItem'] = curItem.GetIsBind()
+ addItemDict['IsAuctionItem'] = isAuctionItem
#addItemDict['IsBind'] = int(curItem.GetIsBind())
#addItemDict['EquipGS'] = GetEquipGearScore(curItem)
#addItemDict['ItemStarLV'] = curItem.GetItemStarLV()
@@ -2071,10 +2039,10 @@
def GetJsonItem(itemInfo):
'''获取物品信息对应的json信息
- @param itemInfo: 支持列表 [itemID, itemCount, isBind], 支持动态列表长度,索引代表属性固定
+ @param itemInfo: 支持列表 [itemID, itemCount, isAuctionItem], 支持动态列表长度,索引代表属性固定
支持物品实例, 如果是示例时必须在给玩家之前先获取出来,防止给玩家后该物品实例被清空
- @return: {"ItemID":101, "Count":10, "IsBind":1, "IsSuite":1, "UserData":"自定义属性字符串"}
+ @return: {"ItemID":101, "Count":10, "IsAuctionItem":1, "UserData":"自定义属性字符串"}
'''
itemDict = {}
if isinstance(itemInfo, list) or isinstance(itemInfo, tuple):
@@ -2084,7 +2052,7 @@
if infolen > 1 and itemInfo[1] > 1:
itemDict["Count"] = itemInfo[1]
if infolen > 2 and itemInfo[2]:
- itemDict["IsBind"] = int(itemInfo[2])
+ itemDict["IsAuctionItem"] = int(itemInfo[2])
elif isinstance(itemInfo, int):
itemDict["ItemID"] = itemInfo
else: #物品实例
@@ -2095,187 +2063,11 @@
itemDict["ItemID"] = itemInfo.GetItemTypeID()
if itemInfo.GetCount() > 1:
itemDict["Count"] = itemInfo.GetCount()
- if itemInfo.GetIsBind():
- itemDict["IsBind"] = int(itemInfo.GetIsBind())
- if itemInfo.GetIsSuite():
- itemDict["IsSuite"] = int(itemInfo.GetIsSuite())
+ if ItemControler.GetIsAuctionItem(itemInfo):
+ itemDict["IsAuctionItem"] = 1
if itemInfo.GetUserData():
itemDict["UserData"] = itemInfo.GetUserData()
return itemDict
-
-## 将物品列表重复物品堆叠起来返回整理后的列表
-# @param itemlist
-# @return 整理后的物品列表
-def GetSimpleItemList(itemlist):
- sItemList = []
- sItemDict = {}
- for item in itemlist:
- maxPackCount = item.GetPackCount()
- if maxPackCount == 0:
- return itemlist
- itemCnt = item.GetCount()
- if itemCnt > maxPackCount:
- return itemlist
- itemid = item.GetItemTypeID()
- isBind = item.GetIsBind()
- key = (itemid,isBind)
- if key in sItemDict:
- for sitem in sItemDict[key]:
- if sitem.GetCount() >= maxPackCount:
- continue
- totalCnt = item.GetCount()+ sitem.GetCount()
-
- if totalCnt > maxPackCount:
- ItemControler.SetItemCount(sitem, maxPackCount)
- ItemControler.SetItemCount(item, totalCnt - maxPackCount)
- sItemList.append(item)
- sItemDict[key].append(item)
- break
- ItemControler.SetItemCount(sitem, totalCnt)
- item.Clear()
- else:
- sItemList.append(item)
- sItemDict[key] = [item]
-
-
- return sItemList
-
-## =======================================================================================
-##根据活动类型配置随机装备品质
-# @param itemType
-# @return 品质
-def GetRandEquipQualityByTable(itemType, tableName):
- qualityRandDict = ReadChConfig.GetEvalChConfig(tableName)
- qualityRandList = qualityRandDict.get(itemType, [])
- if qualityRandList == []:
- qualityRandList = qualityRandDict[-1]
-
- return GameWorld.GetResultByRandomList(qualityRandList, 0)
-
-## 随机卓越装备,根据规则从数据库中筛选出,等级职业
-# @param equipType 装备类型
-# @return 抽奖是否成功
-def RandGreateEquip(curPlayer, equipType, isBind, tableName, quality=1):
- equipList = GameDataControl.GetItemDataListByType(equipType)
- equipLVRandList, lvFormulaStr, lvRange, jobRand, luckyShotRand, greateNumRand, \
- broadcastList, plusRand, addAttrRand = ReadChConfig.GetEvalChConfig(tableName)
-
- playerLV = curPlayer.GetLV()
- step = GameWorld.GetResultByRandomList(equipLVRandList, 0)
- getLVMin = eval(lvFormulaStr)
- getLVMax = getLVMin + lvRange
- checkJob = GameWorld.CanHappen(jobRand)
-
- randList = []
- findItem = None
-
- for item in equipList:
- if item.GetUseLV() < getLVMin or item.GetUseLV() > getLVMax:
- continue
-
- if item.GetItemQuality() != quality:
- continue
-
- if checkJob:
- if JobUseable(curPlayer, item):
- findItem = item
- break
- continue
-
- randList.append(item)
-
- if randList:
- findItem = random.choice(randList)
-
- if findItem == None:
- return None, False
-
- return CreateGreateItem(findItem, luckyShotRand, greateNumRand, broadcastList,
- plusRand, addAttrRand, isBind)
-
-
-## 生成抽奖的卓越装备
-# @param 各属性
-# @return 生成的物品,是否广播
-def CreateGreateItem(findItem, luckyShotRand, greateNumRand, broadcastList,
- plusRand, addAttrRand, isBind):
- itemID = findItem.GetItemTypeID()
- equipItem = CreateSingleItem(itemID)
-
- tmpEquipData = ItemControler.SingleEquipTmpData()
-
- tmpEquipData.starLV = random.randint(plusRand[0], plusRand[1])
- tmpEquipData.holeCnt = 3
- tmpEquipData.isBind = isBind
- tmpEquipData.isSuite = 0
-
- # 装备附加属性
- ChItem.EquipAddAdditionEx(equipItem, tmpEquipData)
-
- broadcast = False
-
- return equipItem, broadcast
-
-
-## 随机普通装备,根据规则从数据库中筛选出,等级职业
-# @param equipType 装备类型
-# @return 抽奖是否成功
-def RandNormalEquip(curPlayer, equipType, isBind, tableName):
- equipList = GameDataControl.GetItemDataListByType(equipType)
- equipLVRandList, lvFormulaStr, lvRange, jobRand, luckyShotRand, \
- plusRand, addAttrRand, skillRand = ReadChConfig.GetEvalChConfig(tableName)
-
- playerLV = curPlayer.GetLV()
- step = GameWorld.GetResultByRandomList(equipLVRandList, 0)
- getLVMin = eval(lvFormulaStr)
- getLVMax = getLVMin + lvRange
- checkJob = GameWorld.CanHappen(jobRand)
-
- randList = []
- findItem = None
-
- for item in equipList:
- if item.GetUseLV() < getLVMin or item.GetUseLV() > getLVMax:
- continue
-
- if item.GetItemQuality() != 0:
- continue
-
- if checkJob:
- if JobUseable(curPlayer, item):
- findItem = item
- break
- continue
-
- randList.append(item)
-
- if randList:
- findItem = random.choice(randList)
-
- if findItem == None:
- return None
-
- return CreateNormalItem(findItem, luckyShotRand, plusRand, addAttrRand, isBind, skillRand)
-
-
-## 生成抽奖的卓越装备
-# @param 各属性
-# @return 生成的物品
-def CreateNormalItem(findItem, luckyShotRand, plusRand, addAttrRand, isBind, skillRand):
- itemID = findItem.GetItemTypeID()
- equipItem = CreateSingleItem(itemID)
-
- tmpEquipData = ItemControler.SingleEquipTmpData()
-
- tmpEquipData.starLV = random.randint(plusRand[0], plusRand[1])
- tmpEquipData.holeCnt = 3
- tmpEquipData.isBind = isBind
- tmpEquipData.isSuite = 0
-
- # 装备附加属性
- ChItem.EquipAddAdditionEx(equipItem, tmpEquipData)
-
- return equipItem
## =======================================================================================
--
Gitblit v1.8.0