From 89cd1373014cea5337624c82d25fa6f84c7fe7c7 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 25 四月 2019 17:38:48 +0800
Subject: [PATCH] 6607 【2.0】【后端】技能升级功能改版
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py | 513 +++++++++++++++++++++-----------------------------------
1 files changed, 193 insertions(+), 320 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 31ad3a8..709d0fe 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
@@ -334,12 +334,14 @@
GameWorld.DebugLog("物品过期时间" + timeStr)
return GameWorld.ChangeTimeStrToNum(timeStr)
-
-## 创建物品
-# @param itemID 物品ID
-# @return curSingleItem
-# @remarks 函数详细说明.
-def CreateSingleItem(itemID, itemCount=1, isBind=1, expireTime=0):
+def CreateSingleItem(itemID, itemCount=1, isAuctionItem=False, expireTime=0):
+ ''' 创建物品
+ @param isAuctionItem: 是否拍品,默认非拍品
+ @param expireTime: 有效时间,时间单位由时效类型决定
+ '''
+ if itemCount < 1:
+ GameWorld.ErrLog("创建物品个数不能少于1! itemID=%s,itemCount=%s" % (itemID, itemCount))
+ return
curSingleItem = GameWorld.GetItemFactory().CreateItem(itemID)
if not curSingleItem:
return
@@ -372,9 +374,12 @@
return
curSingleItem.SetRemainHour(outTimeServerDay)
- if isBind:
- curSingleItem.SetIsBind(1)
-
+ if isAuctionItem:
+ if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemID):
+ ItemControler.SetIsAuctionItem(curSingleItem, isAuctionItem)
+ else:
+ GameWorld.ErrLog("拍卖物品表不存在该ID!创建拍品失败,默认转为非拍品!itemID=%s" % itemID)
+
ItemControler.SetItemCount(curSingleItem, itemCount)
if expireTime > 0:
@@ -383,6 +388,46 @@
#这里返回的是SingleItem , 如果创建了,未使用,会找出C++内存泄露!!!
return curSingleItem
+def UpdateItemUserData(curItem, updateDict={}, delKeyList=[], isUpdateGS=False):
+ ''' 更新物品UserData数据
+ @param curItem: IPY_SingleItem 或 IPY_RoleItem
+ @param updateDict: 需要更新的数据 {key:value, key:valueList, ...}
+ @param delKeyList: 需要删除的数据 key列表[key, ...]
+ @param isUpdateGS: 是否更新评分
+ @note: UserData格式举例 {'17':['65','7','52'],'50':['0'],'19':['420','380','50'],'50':['1552728662']}
+ '''
+
+ isRoleItem = False
+ if not hasattr(curItem, "SetUserData"):
+ item = curItem.GetItem()
+ isRoleItem = True
+ else:
+ item = curItem
+ userData = item.GetUserData()
+ if not userData:
+ userDataDict = {}
+ else:
+ userDataDict = eval(userData)
+
+ for delKey in delKeyList:
+ userDataDict.pop(str(delKey), None)
+
+ for key, value in updateDict.items():
+ if type(value) == int:
+ valueList = ['%s' % value]
+ elif type(value) == list:
+ valueList = ['%s' % v for v in value]
+ else:
+ continue
+ userDataDict['%s' % key] = valueList
+
+ UserData = str(userDataDict).replace(" ", "")
+ item.SetUserData(UserData, len(UserData))
+ if isUpdateGS:
+ MakeEquipGS(curItem)
+ elif isRoleItem:
+ curItem.SetCount(curItem.GetCount()) # 为了触发物品同步
+ return
def MakeEquipGS(curItem):
if not CheckNoteEquipGS(curItem):
@@ -414,8 +459,8 @@
classLV = GetItemClassLV(curItem)
color = curItem.GetItemColor()
- itemQuality = curItem.GetItemQuality()
- gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, itemQuality)
+ isSuit = 1 if curItem.GetSuiteID() > 0 else 0
+ gsParamIpyData = IpyGameDataPY.GetIpyGameData("EquipGSParam", classLV, color, isSuit)
# 传奇属性
legendAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
legendAttrValueCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
@@ -430,52 +475,59 @@
MaxAtk = attrDict.get(ShareDefine.Def_Effect_MaxAtk, 0) + Atk
MaxHP = attrDict.get(ShareDefine.Def_Effect_MaxHP, 0)
Def = attrDict.get(ShareDefine.Def_Effect_Def, 0)
- ArmorDefPer = attrDict.get(ShareDefine.Def_Effect_ArmorDefAddPer, 0)
+ ArmorDefPer = 0
IceAtk = attrDict.get(ShareDefine.Def_Effect_IceAtk, 0)
IceDef = attrDict.get(ShareDefine.Def_Effect_IceDef, 0)
- AtkPer = attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
- DamagePer = attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
- SuperHitRate = attrDict.get(ShareDefine.Def_Effect_SuperHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateC())
+ BaseEquipMaxHPAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipMaxHPAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipMaxHPAddPerC())
+ BaseEquipAtkAddPer = attrDict.get(ShareDefine.Def_Effect_BaseEquipAtkAddPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetBaseEquipAtkAddPerC())
+ AtkPer = 0#attrDict.get(ShareDefine.Def_Effect_AddAtkByPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetAtkPerC())
+ DamagePer = 0#attrDict.get(ShareDefine.Def_Effect_DamagePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamagePerC())
+ SuperHitRate = 0#attrDict.get(ShareDefine.Def_Effect_SuperHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitRateC())
+ SuperHit = attrDict.get(ShareDefine.Def_Effect_SuperHit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitC())
SuperHitPer = attrDict.get(ShareDefine.Def_Effect_SuperHitPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitPerC())
- DamReducePer = attrDict.get(ShareDefine.Def_Effect_DamReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamReducePerC())
- MaxHPPer = attrDict.get(ShareDefine.Def_Effect_MaxHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMaxHPPerC())
- DefPer = attrDict.get(ShareDefine.Def_Effect_DefPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDefPerC())
+ DamReducePer = 0#attrDict.get(ShareDefine.Def_Effect_DamReducePer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamReducePerC())
+ MaxHPPer = 0#attrDict.get(ShareDefine.Def_Effect_MaxHPPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMaxHPPerC())
+ DefPer = 0#attrDict.get(ShareDefine.Def_Effect_DefPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDefPerC())
LuckyHitRate = attrDict.get(ShareDefine.Def_Effect_LuckyHitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateC())
- PetDamPer = attrDict.get(ShareDefine.Def_Effect_PetDamPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPetDamPerC())
+ LuckyHitRateReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckyHitRateReduceC())
+ LuckyHit = attrDict.get(ShareDefine.Def_Effect_LuckyHit, 0)
+ LuckyHitReduce = attrDict.get(ShareDefine.Def_Effect_LuckyHitReduce, 0)
+ LuckPer = attrDict.get(ShareDefine.Def_Effect_LuckPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetLuckPerC())
+ PetDamPer = 0#attrDict.get(ShareDefine.Def_Effect_PetDamPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPetDamPerC())
PerLVAtk = attrDict.get(ShareDefine.Def_Effect_PerLVAtk, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVAtkC())
- MissRate = attrDict.get(ShareDefine.Def_Effect_MissRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissRateC())
- HitRate = attrDict.get(ShareDefine.Def_Effect_HitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitRateC())
- DamBackPer = attrDict.get(ShareDefine.Def_Effect_DamBackPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamBackPerC())
+ MissRate = 0#attrDict.get(ShareDefine.Def_Effect_MissRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissRateC())
+ HitRate = 0#attrDict.get(ShareDefine.Def_Effect_HitRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitRateC())
+ DamBackPer = 0#attrDict.get(ShareDefine.Def_Effect_DamBackPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamBackPerC())
PerLVMaxHP = attrDict.get(ShareDefine.Def_Effect_PerLVMaxHP, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetPerLVMaxHPC())
- DropEquipPer = attrDict.get(ShareDefine.Def_Effect_DropEquipPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDropEquipPerC())
+ DropEquipPer = 0#attrDict.get(ShareDefine.Def_Effect_DropEquipPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDropEquipPerC())
DropMoneyPer = attrDict.get(ShareDefine.Def_Effect_DropMoneyPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDropMoneyPerC())
- IgnoreDefRateReduce = attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
- DamChanceDef = attrDict.get(ShareDefine.Def_Effect_DamChanceDef, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamChanceDefC())
+ IgnoreDefRateReduce = 0#attrDict.get(ShareDefine.Def_Effect_IgnoreDefRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetIgnoreDefRateReduceC())
+ DamChanceDef = 0#attrDict.get(ShareDefine.Def_Effect_DamChanceDef, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetDamChanceDefC())
SuperHitReduce = attrDict.get(ShareDefine.Def_Effect_SuperHitReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSuperHitReduceC())
- SkillAtkRate = attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
- SpeedPer = attrDict.get(ShareDefine.Def_Effect_SpeedPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSpeedPerC())
- SkillAtkRateReduce = attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
+ SkillAtkRate = 0#attrDict.get(ShareDefine.Def_Effect_SkillAtkRate, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateC())
+ SpeedPer = 0#attrDict.get(ShareDefine.Def_Effect_SpeedPer, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSpeedPerC())
+ SkillAtkRateReduce = 0#attrDict.get(ShareDefine.Def_Effect_SkillAtkRateReduce, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAtkRateReduceC())
Hit = attrDict.get(ShareDefine.Def_Effect_Hit, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetHitC())
Miss = attrDict.get(ShareDefine.Def_Effect_Miss, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetMissC())
- SkillAddPerA = attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
- SkillAddPerB = attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
- SkillAddPerC = attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
- SkillAddPerD = attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
- SkillAddPerE = attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
- SkillAddPerF = attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
- SkillAddPerG = attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
- SkillReducePerA = attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
- SkillReducePerB = attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
- SkillReducePerC = attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
- SkillReducePerD = attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
- SkillReducePerE = attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
- SkillReducePerF = attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
- SkillReducePerG = attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
+ SkillAddPerA = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer1C())
+ SkillAddPerB = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer2C())
+ SkillAddPerC = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer3C())
+ SkillAddPerD = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer4C())
+ SkillAddPerE = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer5C())
+ SkillAddPerF = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer6C())
+ SkillAddPerG = 0#attrDict.get(ShareDefine.Def_Effect_SkillAddPer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillAddPer7C())
+ SkillReducePerA = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer1, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer1C())
+ SkillReducePerB = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer2, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer2C())
+ SkillReducePerC = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer3, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer3C())
+ SkillReducePerD = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer4, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer4C())
+ SkillReducePerE = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer5, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer5C())
+ SkillReducePerF = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer6, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer6C())
+ SkillReducePerG = 0#attrDict.get(ShareDefine.Def_Effect_SkillReducePer7, 0) * (1 if not gsParamIpyData else gsParamIpyData.GetSkillReducePer7C())
# 攻速不默认乘,仅作为参数提供策划使用
- AtkSpeed = attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
- AtkSpeedC = 1 if not gsParamIpyData else gsParamIpyData.GetAtkSpeedC()
+ AtkSpeed = 0#attrDict.get(ShareDefine.Def_Effect_AtkSpeed, 0)
+ AtkSpeedC = 1#1 if not gsParamIpyData else gsParamIpyData.GetAtkSpeedC()
# 绝版
outOfPrintAttrIDCnt = curItem.GetUserAttrCount(ShareDefine.Def_IudetOutOfPrintAttrID)
@@ -517,7 +569,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):
@@ -578,7 +630,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:
@@ -821,9 +873,8 @@
userData = curItem.GetUserData()
notifyList[4] = userData if (userData and userData != "{}") else ""
notifyList[5] = place
- suiteInfo = PlayerViewCacheTube.__GetEquipPartSuiteInfo(curPlayer)
- notifyList[6] = "" if not suiteInfo else json.dumps(suiteInfo, ensure_ascii=False)
- notifyList[7] = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, place)
+ notifyList[6] = ""
+ notifyList[7] = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, place)
# 单部位洗练信息
washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) + 1
@@ -864,32 +915,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
@@ -960,22 +994,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 装备对象
@@ -1153,7 +1171,7 @@
for i in range(curItemPack.GetCount()):
findItem = curItemPack.GetAt(i)
- if not CheckItemCanUse(findItem):
+ if not CheckItemCanUse(findItem) or ItemControler.GetIsAuctionItem(findItem):
continue
#不使用绑定的材料
@@ -1196,7 +1214,7 @@
for i in range(curItemPack.GetCount()):
curItem = curItemPack.GetAt(i)
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
#不使用绑定的材料
@@ -1235,7 +1253,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:
@@ -1277,7 +1295,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:
@@ -1319,7 +1337,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:
@@ -1365,7 +1383,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:
@@ -1409,7 +1427,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:
@@ -1512,7 +1530,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:
@@ -1616,7 +1634,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()
@@ -1647,19 +1665,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
#---------------------------------------------------------------------
@@ -1770,13 +1789,6 @@
## 返回是否诛仙装备
return curItem.GetType() in ChConfig.Def_ZhuXianEquiipType
-## 返回是否武器
-# @param curItem 当前物品
-# @return None
-# @remarks 函数详细说明.
-def GetIsWeapon(curItem):
- return curItem.GetType() in ChConfig.Def_WeaponItemType
-
#---------------------------------------------------------------------
##遍历数据库查找合适的物品, 通过 效果ID + 效果A值确定物品
# @param itemType 物品类型
@@ -1823,7 +1835,7 @@
curItem = curItemPack.GetAt(i)
#检查物品
- if not CheckItemCanUse(curItem):
+ if not CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
continue
effect = curItem.GetEffectByIndex(0)
@@ -1919,34 +1931,45 @@
ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
return
-## 获取物品最高强化星级
+## 获取物品最高强化等级
# @param itemType: 物品类型
# @return 最大星级,0为不可强化
-def GetItemMaxStarLV(curItem):
- equipPlace = curItem.GetEquipPlace()
- plusMaxTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
- if not plusMaxTypeDict:
- GameWorld.ErrLog("GetItemMaxStarLV没有强化类型映射表")
+def GetItemMaxPlusLV(curPlayer, equipPackindex, curItem):
+ findType = ChEquip.GetEquipPlusType(curItem)
+ if not findType:
return 0
-
- if equipPlace not in plusMaxTypeDict:
- return 0
- findType = plusMaxTypeDict[equipPlace]
- #仙器特殊取固定值
- if equipPlace in [ShareDefine.retFairyCan, ShareDefine.retFairyCan2]:
- rank = 0
- itemColor = 0
- else:
- rank = GetItemClassLV(curItem)
- itemColor = curItem.GetItemColor()
- ipyData = IpyGameDataPY.GetIpyGameData("ItemPlusMax", findType, rank, itemColor)
+ equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackindex, curItem)
+ ipyData = IpyGameDataPY.InterpolationSearch('ItemPlusMax', 'Star', equipStar, {'Type':findType})
if not ipyData:
- GameWorld.ErrLog("找不到装备强化等级上限表数据配置! rank = %s, %s" % (rank , curItem.GetItemQuality()))
- return
-
+ return 0
return ipyData.GetLevelMax()
+
-## 获取物品阶级
+## 获取物品最高强化进化等级
+# @param itemType: 物品类型
+# @return 最大星级,0为不可强化
+def GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curItem):
+ packType = IPY_GameWorld.rptEquip
+ curPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, equipPackindex, curItem)
+ equipPlace = curItem.GetEquipPlace()
+ ipyData = IpyGameDataPY.InterpolationSearch('EquipPlusEvolve', 'NeedPlusLV', curPlusLV, {'EquipPlace':equipPlace})
+ if not ipyData:
+ return 0
+ return ipyData.GetEvolveLV()
+
+
+## 获取物品最高星数
+# @param itemType: 物品类型
+# @return 最大星级,0为不可强化
+def GetItemMaxStar(curItem):
+ itemColor = curItem.GetItemColor()
+ maxStarDict = IpyGameDataPY.GetFuncEvalCfg('EquipPartStar', 1)
+ if str(itemColor) not in maxStarDict:
+ return 0
+ classLV = GetItemClassLV(curItem)
+ return maxStarDict[str(itemColor)].get(str(classLV), 0)
+
+## 获取物品阶级或品级
def GetItemClassLV(curItem):
return curItem.GetLV()
@@ -1962,6 +1985,13 @@
def SetEquipGearScore(curItem, value):
return curItem.SetGearScore(value)
+def GetEquipPackIndex(curItem):
+ ## 根据物品获取对应的可装备背包位置
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', GetItemClassLV(curItem), curItem.GetEquipPlace())
+ if not ipyData:
+ return -1
+ return ipyData.GetGridIndex()
+
## 每日可使用次数
def GetCanUseCountDaily(curItem): return curItem.GetMaxAddSkillCnt()
## 每周可使用次数, 预留,暂不实现
@@ -1972,13 +2002,15 @@
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['IsBind'] = int(curItem.GetIsBind())
+ addItemDict['IsAuctionItem'] = isAuctionItem
+ #addItemDict['IsBind'] = int(curItem.GetIsBind())
#addItemDict['EquipGS'] = GetEquipGearScore(curItem)
#addItemDict['ItemStarLV'] = curItem.GetItemStarLV()
#addItemDict['CurDurg'] = GameWorld.GetIntUpper(curItem.GetCurDurg(), ChConfig.Def_EndureRepairParameter)
@@ -2002,7 +2034,7 @@
#addItemDict['EquipMaxAtkValue'] = curItem.GetEquipMaxAtkValue()
#addItemDict['FitLV'] = curItem.GetFitLV()
#addItemDict['Proficiency'] = curItem.GetProficiency()
- addItemDict['IsSuite'] = int(curItem.GetIsSuite())
+ #addItemDict['IsSuite'] = int(curItem.GetIsSuite())
#addItemDict['BaseHP'] = curItem.GetBaseHP()
#addItemDict['BaseMagicDef'] = curItem.GetBaseMagicDef()
#addItemDict['MaxAddSkillCnt'] = curItem.GetMaxAddSkillCnt()
@@ -2014,10 +2046,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):
@@ -2027,7 +2059,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: #物品实例
@@ -2038,187 +2070,28 @@
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
+def GetWeightItemListByAlchemyDiffLV(curPlayer, weightList, alchemyDiffLV):
+ ## 根据炼丹等级差异等级过滤权重列表中不满足的物品,返回新的权重列表
+ resultWeightList = []
+ if alchemyDiffLV:
+ curAlchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
+ for itemInfo in weightList:
+ itemID = itemInfo[1][0]
+ itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
+ if not itemData:
+ continue
+ if GetItemClassLV(itemData) > curAlchemyLV + alchemyDiffLV:
+ continue
+ resultWeightList.append(itemInfo)
+ else:
+ resultWeightList = weightList
+ return resultWeightList
## =======================================================================================
--
Gitblit v1.8.0