From 10a2b69436a1ebb09fa49a339655e150bfda70a8 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期六, 13 四月 2019 17:16:54 +0800 Subject: [PATCH] 6457 新增GM命令 AddFairyEvent 事件ID 事件ID。。 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 183 +++++++++++++++++++-------------------------- 1 files changed, 76 insertions(+), 107 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py index cb28e8c..b67f0aa 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py @@ -31,11 +31,14 @@ import ChPyNetSendPack import NetPackCommon import Operate_EquipStone +import PlayerMagicWeapon import IpyGameDataPY import DataRecordPack import EventShell +import ChEquip import math +import time #--------------------------------------------------------------------- ## 获得背包的一个空格子 @@ -111,7 +114,7 @@ for i in range(0, curPack.GetCount()): item = curPack.GetAt(i) - if not ItemCommon.CheckItemCanUse(item): + if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item): continue if item.GetItemTypeID() == id: @@ -131,7 +134,7 @@ for i in range(0, curPack.GetCount()): item = curPack.GetAt(i) - if not ItemCommon.CheckItemCanUse(item): + if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item): continue if item.GetItemTypeID() == id: @@ -150,7 +153,7 @@ for i in range(0, curPack.GetCount()): item = curPack.GetAt(i) - if not ItemCommon.CheckItemCanUse(item): + if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item): continue effect = item.GetEffectByIndex(0) @@ -271,7 +274,7 @@ for i in range(0, curPack.GetCount()): item = curPack.GetAt(i) - if not ItemCommon.CheckItemCanUse(item): + if not ItemCommon.CheckItemCanUse(item) or GetIsAuctionItem(item): continue if item.GetItemTypeID() != id: @@ -320,7 +323,7 @@ # @remarks 函数详细说明. def CanPackItemByItemType(srcItemID, srcItemIsBind, destItemID, destItemIsBind): ## 拍品项目,只有非拍品可堆叠,即绑定物品 - if srcItemID == destItemID and srcItemIsBind == destItemIsBind and srcItemIsBind: + if srcItemID == destItemID and srcItemIsBind == destItemIsBind and not srcItemIsBind: return True return False @@ -477,40 +480,6 @@ return True return False -#物品属性判断------------------------------------------------------------------ -## 使用物品检查是否满足属性 -# @param curPlayer 当前玩家 -# @param curItem 当前物品 -# @return False or True -def CheckItemAttrLimit(curPlayer, curItem): - # 取消限制的物品 - if curItem.GetUserAttr(ShareDefine.Def_IudetCancelUseLimit) == 1: - return True - #智力为基础限制 - if curItem.GetLimitPNE() > curPlayer.GetPNE(): - return False - - #由于可变属性强化表加载问题, 暂时不处理强化表的属性点限制,以物品表为主,如有需要再开启此判断 20151210 by hxp - # 从强化表中获得数据,装备强化限制力量 敏捷 -# if curItem.GetType() in ReadChConfig.GetEvalChConfig("EquipPlus_EquipType"): -# plusInfo = ... -# -# if plusInfo is None: -# GameWorld.ErrLog("tagItemPlus.txt can't find equip:%s" % curItem.GetItemTypeID()) -# return False -# -# limitSTR, limitPHY = plusInfo.GetLimitSTR(), plusInfo.GetLimitPHY() -# -# # 物品表中获得信息 -# else: - limitSTR, limitPHY = curItem.GetLimitSTR(), curItem.GetLimitPHY() - - if limitSTR > curPlayer.GetSTR() or limitPHY > curPlayer.GetPHY(): - return False - - return True - - #物品使用等级判断---------------------------------------------------------------- ## 物品使用等级判断 # @param curPlayer 玩家 @@ -660,7 +629,7 @@ SetItemCount(srcItem, srcItem.GetCount() - realPutCount) SetItemCount(destItem, destItem.GetCount() + realPutCount) - SetItemIsBind(destItem, True) + #SetItemIsBind(destItem, True) return True #2. 目标位置有东西, 并且可以堆叠 if (CanPackItem(srcItem, destItem) and maxPackCount > destItem.GetCount()): @@ -774,7 +743,7 @@ # return False #职业检查 - if not ItemCommon.JobUseable(curPlayer, curItem): + if not ItemCommon.CheckJob(curPlayer, curItem): if needNotify: PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379") @@ -792,13 +761,7 @@ #等级检查 if not CheckItemUseLV(curPlayer, curItem, needNotify): return False - - #使用物品检查是否满足属性 - if not CheckItemAttrLimit(curPlayer, curItem): - if needNotify: - PlayerControl.NotifyCode(curPlayer, "itemuse_andyshao_671654") - return False - + #======================================================================= # #马匹检查 # if curItem.GetType() == ChConfig.Def_Item_Type_Horse and not CheckCanEquipHorse(curPlayer): @@ -870,9 +833,6 @@ equipItem = equipPack.GetAt(equipPackIndex) desItemID, desUserData = [0, ''] if equipItem.IsEmpty() else [equipItem.GetItemTypeID(), equipItem.GetUserData()] srcItemID, srcUserData = curItem.GetItemTypeID(), curItem.GetUserData() - # 装备绑定处理 在 DoLogic_ItemBindType函数有处理,此处注释掉 -# if not curItem.GetIsBind(): -# SetItemIsBind(curItem, True) #--其他装备物品--- #itemColor = curItem.GetItemColor() @@ -947,6 +907,8 @@ equipID = curEquip.GetItemTypeID() userData = curEquip.GetUserData() equipPlace = curEquip.GetEquipPlace() + suiteID = curEquip.GetSuiteID() + itemClassLV = ItemCommon.GetItemClassLV(curEquip) #该物品锁定不执行============================================== if curEquip.GetIsLocked(): PlayerControl.NotifyCode(curPlayer, "RescannotEquip") @@ -981,6 +943,14 @@ if not DragItem(curPlayer, IPY_GameWorld.rptEquip, equipIndex, IPY_GameWorld.rptItem, packIndex, curEquipCount): return self.RefreshStartEquipCount() + + # 广播卸装 + if equipIndex in PlayerControl.GetFaceEquipIndexList(curPlayer) or equipPlace in ChConfig.Def_SyncEquipStateByIndex: + curPlayer.Sync_UnEquipItem(equipID, equipIndex) + if suiteID and itemClassLV == ChEquip.GetEquipFacadeClassLV(curPlayer): + #脱当前外观阶的套装 + ChEquip.ChangeEquipfacadeByClassLV(curPlayer, itemClassLV) + EventShell.EventRespons_EquipStar(curPlayer) dataDict = {'dotype':'UnEquipItem', 'equipID':equipID, 'userData':userData} DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict) @@ -995,7 +965,7 @@ # # destItemPlace.PutIn(curEquip) #=============================================================================== - return equipID, equipPlace + return equipID, equipPlace, itemClassLV #是否能放入物品(第几个物品栏, 物品序号, 放入的物品, 放入物品ID, 物品是否绑定) #=============================================================================== @@ -1115,8 +1085,7 @@ packIndex = ChConfig.GetItemPackType(curItemData.GetType(), packIndex) tagItemCount = GetItemCount(tagItem) - isBind = tagItem.GetIsBind() - isAuctionItem = not isBind + isAuctionItem = GetIsAuctionItem(tagItem) if not self.CanPutInItem(packIndex, tagItem.GetItemTypeID(), tagItemCount, isAuctionItem, defaultPile): GameWorld.DebugLog("背包满,不能放入物品 count = %d"%GetItemCount(tagItem)) tagItem.Clear() @@ -1126,7 +1095,8 @@ itemID = tagItem.GetItemTypeID() #激活成就的道具 if tagItem.GetType() == ChConfig.Def_ItemType_SuccessItem: - PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_GetSpecialItem, 1, [tagItem.GetEffectByIndex(0).GetEffectValue(0)]) + PlayerMagicWeapon.DoActiveMW(curPlayer, tagItem.GetEffectByIndex(0).GetEffectValue(0)) + tagItem.Clear() return True if itemID in ChConfig.Def_TransformItemIDList: # 直接转化为对应货币的物品仅在放入背包时直接转化,否则还是以真实物品的形式存在,但堆叠上限需要做特殊处理 @@ -1364,7 +1334,6 @@ GameWorld.Log("找不到ItemID = %d" % curItemID) return False, 0 - isBind = True if curItemID in ChConfig.Def_TransformItemIDList: # 货币直接转换的物品如果是放入背包的则直接转化,无需暂用格子 if packIndex == IPY_GameWorld.rptItem: @@ -1373,7 +1342,6 @@ elif isAuctionItem: maxPackCount = curItemCount defaultPile = False # 新放入的拍品只能放空位置,所以不判断堆叠 - isBind = False else: maxPackCount = curItemData.GetPackCount() @@ -1413,7 +1381,7 @@ if item.GetIsLocked(): continue - if (CanPackItemByItemType(item.GetItemTypeID(), item.GetIsBind(), curItemID, isBind) and + if (CanPackItemByItemType(item.GetItemTypeID(), item.GetIsBind(), curItemID, isAuctionItem) and maxPackCount > GetItemCount(item)): #该物品锁定不执行============================================== #可堆叠 @@ -1546,7 +1514,7 @@ #curItemGUID = curItem.GetGUID() curItemCount = curItem.GetCount() #curItemIsBind = curItem.GetIsBind() - isAuctionItem = 0 if curItem.GetIsBind() else 1 + isAuctionItem = GetIsAuctionItem(curItem) #toPackIndex = ChConfig.GetItemPackType(curItem.GetType(), toPackIndex) # 常规物品转移到虚拟符印背包 @@ -2194,7 +2162,7 @@ #tmpEquipData.starLV = int(itemData.get('StarLV', '0')) #tmpEquipData.holeCnt = int(itemData.get('HoleCount', '0')) #tmpEquipData.stoneData = eval(itemData.get('StoneData', '[]')) - tmpEquipData.isBind = 1 if not isAuctionItem else 0 + tmpEquipData.isBind = isAuctionItem #tmpEquipData.isSuite = int(itemData.get('IsSuit', '0')) #tmpEquipData.suiteLV = int(itemData.get('SuiteLV', '0')) #if tmpEquipData.suiteLV: @@ -2259,16 +2227,29 @@ GameWorld.ErrLog('DoLogic_PutItemInPack Error 物品无法放入背包') return False -## 设置物品是否绑定 -# @param curGiveItem 物品实例 -# @param isBind 是否绑定 -# @return None -# @remarks -def SetItemIsBind(curGiveItem, isBind): - #isBind = False - curGiveItem.SetIsBind(isBind) +## 是否拍品 +def GetIsAuctionItem(curItem): return curItem.GetIsBind() +def SetIsAuctionItem(curItem, isAuctionItem, curPlayer=None): + curItem.SetIsBind(isAuctionItem) + + if isAuctionItem: + curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time())) + return + + if not curPlayer: + return + + if ItemCommon.GetIsEquip(curItem): + # 生成传奇属性 + legendAttrInfo = GetAddEquipLegendAttr(curItem, curPlayer) + if not legendAttrInfo: + return + attrIDList, attrValueList = legendAttrInfo + updateDict = {ShareDefine.Def_IudetLegendAttrID:attrIDList, ShareDefine.Def_IudetLegendAttrValue:attrValueList} + delKeyList = [ShareDefine.Def_IudetAuctionItemCreateTime] + ItemCommon.UpdateItemUserData(curItem, updateDict, delKeyList, isUpdateGS=True) + return - ## 设置物品数量 # @param item 物品实例 @@ -2390,7 +2371,7 @@ '''获取生成到装备上的传奇属性 @return: None 或者 [[传奇属性效果ID列表], [属性值列表]] ''' - if not curItem.GetIsBind(): + if GetIsAuctionItem(curItem): #GameWorld.DebugLog("拍品无法生成传奇属性!") return itemID = curItem.GetItemTypeID() @@ -2403,10 +2384,8 @@ if itemColor >= ChConfig.Def_Quality_Purple: GameWorld.DebugLog("该装备没有传奇属性: itemID=%s" % (itemID)) return - fixedLegendAttrCount = attrCountIpyData.GetFixedLegendAttrCount() - goodLegendAttrCount = attrCountIpyData.GetGoodLegendAttrCount() - otherLegendAttrCount = attrCountIpyData.GetOtherLegendAttrCount() - if fixedLegendAttrCount <= 0 and goodLegendAttrCount <= 0 and otherLegendAttrCount <= 0: + legendAttrCountInfoList = attrCountIpyData.GetLegendAttrCountInfo() # 传奇属性条数信息 [[条数, [属性类型库编号, ...]], ...] + if not legendAttrCountInfoList: return if not curPlayer: @@ -2418,53 +2397,42 @@ attrTypeIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrType", itemType) if not attrTypeIpyData: return - fixedLegendAttrList = attrTypeIpyData.GetFixedLegendAttrList() - goodLegendAttrList = attrTypeIpyData.GetGoodLegendAttrList() - commLegendAttrList = attrTypeIpyData.GetCommLegendAttrList() + legendAttrTypeLibDict = attrTypeIpyData.GetLegendAttrTypeLib() # 传奇属性类型库 {属性类型库编号:[属性ID,...], ...} + curLegAttrIDList = [] curLegAttrValueList = [] + itemClassLV = ItemCommon.GetItemClassLV(curItem) if isAllAttr: if curPlayer.GetGMLevel() != 90: return - curLegAttrIDList = fixedLegendAttrList + goodLegendAttrList + commLegendAttrList + for attrIDList in legendAttrTypeLibDict.values(): + curLegAttrIDList += attrIDList + #GameWorld.DebugLog("所有传奇属性: %s" % (curLegAttrIDList), playerID) else: - if fixedLegendAttrCount: - if len(fixedLegendAttrList) < fixedLegendAttrCount: - GameWorld.ErrLog("装备固定传奇属性配置不足!itemID=%s,itemType=%s,fixedLegendAttrCount=%s,fixedLegendAttrList=%s" - % (itemID, itemType, fixedLegendAttrCount, fixedLegendAttrList), playerID) - return - curLegAttrIDList += fixedLegendAttrList[:fixedLegendAttrCount] - - if goodLegendAttrCount: - if len(goodLegendAttrList) < goodLegendAttrCount: - GameWorld.ErrLog("装备追求传奇属性配置不足!itemID=%s,itemType=%s,goodLegendAttrCount=%s,goodLegendAttrList=%s" - % (itemID, itemType, goodLegendAttrCount, goodLegendAttrList), playerID) - return - curLegAttrIDList += random.sample(goodLegendAttrList, goodLegendAttrCount) - - if otherLegendAttrCount: - otherLegendAttrList = list(goodLegendAttrList) + list(commLegendAttrList) + #GameWorld.DebugLog("随机传奇属性: itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s" + # % (itemID, itemType, itemClassLV, itemColor, isSuit), playerID) + for attrCount, libNumList in legendAttrCountInfoList: + attrIDList = [] + for libNum in libNumList: + attrIDList.extend(legendAttrTypeLibDict.get(libNum, [])) for curAttrID in curLegAttrIDList: - if curAttrID in otherLegendAttrList: - otherLegendAttrList.remove(curAttrID) - if len(otherLegendAttrList) < otherLegendAttrCount: - GameWorld.ErrLog("装备一般传奇属性配置不足!itemID=%s,itemType=%s,otherLegendAttrCount=%s,otherLegendAttrList=%s" - % (itemID, itemType, otherLegendAttrCount, otherLegendAttrList), playerID) + if curAttrID in attrIDList: + attrIDList.remove(curAttrID) + if len(attrIDList) < attrCount: + GameWorld.ErrLog("装备传奇属性ID库配置不够条数随机!itemID=%s,itemType=%s,legendAttrCountInfoList=%s,legendAttrTypeLibDict=%s" + % (itemID, itemType, legendAttrCountInfoList, legendAttrTypeLibDict), playerID) return - curLegAttrIDList += random.sample(otherLegendAttrList, otherLegendAttrCount) + curLegAttrIDList += random.sample(attrIDList, attrCount) + #GameWorld.DebugLog(" 随机传奇属性: attrCount=%s,libNumList=%s,attrIDList=%s,curLegAttrIDList=%s" + # % (attrCount, libNumList, attrIDList, curLegAttrIDList), playerID) # 3. 定数值 - itemClassLV = ItemCommon.GetItemClassLV(curItem) attrValueIpyData = IpyGameDataPY.GetIpyGameData("EquipLegendAttrValue", itemType, itemClassLV, itemColor, isSuit) if not attrValueIpyData: GameWorld.ErrLog("传奇属性等级数值表找不到配置!itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s" % (itemID, itemType, itemClassLV, itemColor, isSuit), playerID) return - #GameWorld.DebugLog("随机传奇属性: itemID=%s,itemType=%s,itemClassLV=%s,itemColor=%s,isSuit=%s" - # % (itemID, itemType, itemClassLV, itemColor, isSuit, ), playerID) - #GameWorld.DebugLog(" 固定条数=%s-%s,追求条数=%s-%s,其他条数=%s-%s" - # % (fixedLegendAttrCount, fixedLegendAttrList, goodLegendAttrCount, goodLegendAttrList, - # otherLegendAttrCount, commLegendAttrList), playerID) + attrLVLibNumDict = attrValueIpyData.GetLVLegendAttrLibNumInfo() # {属性ID:{等级:库编号, ...}} for attrID in curLegAttrIDList: if attrID not in attrLVLibNumDict: @@ -2575,7 +2543,7 @@ mailItemList = [] for tempItem in tempItemList: mailItemList.append(ItemCommon.GetMailItemDict(tempItem)) - mailItemList +=extraItemList + mailItemList += extraItemList mailTypeKey = ShareDefine.DefaultLackSpaceMailType if not mailTypeKey else mailTypeKey PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList) else: @@ -2612,3 +2580,4 @@ for itemID, itemCnt, isAuctionItem in itemList: GivePlayerItem(curPlayer, itemID, itemCnt, isAuctionItem, [IPY_GameWorld.rptItem], event=event) return + -- Gitblit v1.8.0