|  |  | 
 |  |  | import ShareDefine
 | 
 |  |  | import PlayerAttrFruit
 | 
 |  |  | import DataRecordPack
 | 
 |  |  | import PyMapTable
 | 
 |  |  | import ChPyNetSendPack
 | 
 |  |  | import NetPackCommon
 | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | 
 |  |  | import NPCCommon
 | 
 |  |  | import FBCommon
 | 
 |  |  | 
 | 
 |  |  | import random
 | 
 |  |  | import json
 | 
 |  |  | #---------------------------------------------------------------------
 | 
 |  |  | #导入
 | 
 |  |  | 
 |  |  |         singItem.Clear()
 | 
 |  |  |     #===============================================================================================
 | 
 |  |  |     # # (跨服掉落功勋物品, 不给实际物品,转化为功勋值)
 | 
 |  |  |     # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsMergeServer():
 | 
 |  |  |     # elif curEffID == ChConfig.Def_Effect_ItemGiveGongXun and GameWorld.IsCrossServer():
 | 
 |  |  |     #    #=======================================================================
 | 
 |  |  |     #    # # 不需要队伍提示
 | 
 |  |  |     #    # if not isTeamNotify:
 | 
 |  |  | 
 |  |  |         
 | 
 |  |  |         curItemCount = singItem.GetCount()
 | 
 |  |  |         curItemID = singItem.GetItemTypeID()
 | 
 |  |  |         curItemIsBind = singItem.GetIsBind()
 | 
 |  |  |         curItemIsAuctionItem = ItemControler.GetIsAuctionItem(singItem)
 | 
 |  |  |         
 | 
 |  |  |         isPutInTemp = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PickupItemPutInTemp)
 | 
 |  |  |         packIndex = ShareDefine.rptTempItem if isPutInTemp else IPY_GameWorld.rptItem
 | 
 |  |  |         packIndex = ChConfig.GetItemPackType(singItem.GetType(), packIndex)
 | 
 |  |  |         
 | 
 |  |  |         # 是否可放入
 | 
 |  |  |         if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsBind):
 | 
 |  |  |         if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsAuctionItem):
 | 
 |  |  |             PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex])
 | 
 |  |  |             GameWorld.Log("拾取物品无法放入背包!mapItemID=%s,dropItemNPCID=%s,curItemID=%s,packIndex=%s" 
 | 
 |  |  |                           % (mapItemID, dropItemNPCID, curItemID, packIndex), curPlayer.GetPlayerID())
 | 
 |  |  | 
 |  |  |             return
 | 
 |  |  | 
 | 
 |  |  |         if dropItemNPCID:
 | 
 |  |  |             serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
 | 
 |  |  |             mapID = GameWorld.GetGameWorld().GetMapID()
 | 
 |  |  |             NPCCommon.SendGameServerGoodItemRecord(mapID, dropItemNPCID, curPlayer.GetName(), 
 | 
 |  |  |                                                    curPlayer.GetPlayerID(), curItemID, equipInfo)
 | 
 |  |  |                                                    curPlayer.GetPlayerID(), curItemID, equipInfo, serverGroupID)
 | 
 |  |  |             
 | 
 |  |  |         # 不需要队伍提示
 | 
 |  |  |         #=======================================================================
 | 
 |  |  | 
 |  |  |         mapID = curPlayer.GetMapID()
 | 
 |  |  |         fbIpyData = FBCommon.GetFBIpyData(mapID)
 | 
 |  |  |         if fbIpyData and not fbIpyData.GetGuardPick():
 | 
 |  |  |             GameWorld.DebugLog("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
 | 
 |  |  |             GameWorld.Log("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
 | 
 |  |  |             return
 | 
 |  |  |         
 | 
 |  |  | #    #单人副本一键拾取
 | 
 |  |  | 
 |  |  | #        SingleFBTPickUP(curPlayer, mapItemID, tick)
 | 
 |  |  | #        return
 | 
 |  |  |     
 | 
 |  |  |     GameWorld.DebugLog("请求拾取物品, isGuard=%s,mapItemIDList=%s" % (isGuard, mapItemIDList), curPlayer.GetPlayerID())
 | 
 |  |  |     if not mapItemIDList:
 | 
 |  |  |         GameWorld.ErrLog("没有指定要拾取的地图物品ID!", curPlayer.GetPlayerID())
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     succMapItemIDList = [] # 成功拾取的地图物品
 | 
 |  |  |     for mapItemID in mapItemIDList:
 | 
 |  |  |         if __DoPickup(curPlayer, mapItemID, tick, isGuard):
 | 
 |  |  |             succMapItemIDList.append(mapItemID)
 | 
 |  |  |             
 | 
 |  |  |     GameWorld.DebugLog("    成功拾取物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
 | 
 |  |  |      | 
 |  |  |     if succMapItemIDList:
 | 
 |  |  |         GameWorld.Log("成功拾取地图物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
 | 
 |  |  |          | 
 |  |  |     # 守护拾取的,附加同步守护拾取结果
 | 
 |  |  |     if isGuard and succMapItemIDList:
 | 
 |  |  |         guradPickupSucc = ChPyNetSendPack.tagMCGuradPickupItemSucc()
 | 
 |  |  | 
 |  |  | #  @remarks 
 | 
 |  |  | def CheckPlayerUseItemSelf(curPlayer, curItem, tick):
 | 
 |  |  |     #----------------------检查非法物品属性
 | 
 |  |  |     if not ItemCommon.CheckItemCanUse(curItem):
 | 
 |  |  |     if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
 | 
 |  |  |         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_644055")
 | 
 |  |  |         return False
 | 
 |  |  |     
 | 
 |  |  | 
 |  |  |     maxCnt = ItemCommon.GetCanUseCountDaily(curItem)
 | 
 |  |  |     if maxCnt <= 0:
 | 
 |  |  |         return -1
 | 
 |  |  |     curItemID = curItem.GetItemTypeID()
 | 
 |  |  |     useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % curItemID)
 | 
 |  |  |     for itemIDList in IpyGameDataPY.GetFuncEvalCfg('ShareUseCntItem'):
 | 
 |  |  |         if curItemID not in itemIDList:
 | 
 |  |  |             continue
 | 
 |  |  |         for itemID in itemIDList:
 | 
 |  |  |             if itemID == curItemID:
 | 
 |  |  |                 continue
 | 
 |  |  |             useCnt += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID)
 | 
 |  |  |     
 | 
 |  |  |     itemID = curItem.GetItemTypeID()
 | 
 |  |  |     useCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ItemUseCntToday % itemID)
 | 
 |  |  |     canUseCnt = max(0, maxCnt - useCnt)
 | 
 |  |  |     
 | 
 |  |  |     if canUseCnt <= 0:
 | 
 |  |  |         GameWorld.DebugLog("已达到今日使用次数上限!itemID=%s,useCnt=%s,maxCnt=%s" % (itemID, useCnt, maxCnt))
 | 
 |  |  |         GameWorld.DebugLog("已达到今日使用次数上限!itemID=%s,useCnt=%s,maxCnt=%s" % (curItemID, useCnt, maxCnt))
 | 
 |  |  |         #PlayerControl.NotifyCode(curPlayer, notifyMark, [itemID])
 | 
 |  |  |         
 | 
 |  |  |     #GameWorld.DebugLog("物品ID(%s)今日已使用次数(%s), maxCnt=%s" % (itemID, useCnt, maxCnt))
 | 
 |  |  | 
 |  |  |                            ChConfig.Def_ItemType_GiveMoney:"Item_GiveMoney",         # 给人物金钱
 | 
 |  |  |                            ChConfig.Def_ItemType_AddLimitBuff:"Item_Add_LimitingBuff",         # 给限时buff物品
 | 
 |  |  |                            ChConfig.Def_ItemType_AddExpBuff:"Item_Add_LimitingBuff",         # 给限时buff物品
 | 
 |  |  |                            ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint"    #单个属性点重置
 | 
 |  |  |                            ChConfig.Def_ItemType_ResetAttrPoint:"Item_ResetAttrPoint",    #单个属性点重置
 | 
 |  |  |                            ChConfig.Def_ItemType_AddCrossRealmPKCnt:"Item_AddCrossRealmPKCnt"    #增加跨服PK次数
 | 
 |  |  |                            } 
 | 
 |  |  |     
 | 
 |  |  |     #根据物品效果使用{物品效果ID:call的py名}
 | 
 |  |  | 
 |  |  |                             ChConfig.Def_Effect_ResetBossKillCnt:"Item_ResetBossKillCnt", # 重置boss击杀疲劳
 | 
 |  |  |                             ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # 增加副本可进入次数
 | 
 |  |  |                             ChConfig.Def_Effect_AddKillBossCnt:"Item_AddKillBossCnt", # 增加BOSS可击杀次数
 | 
 |  |  |                             #ChConfig.Def_PhoneVip_EffID:"Item_AddPhoneVip", # 手机VIP物品卡
 | 
 |  |  |                             #ChConfig.Def_Effect_AddZhenQiByTimes:"Item_AddZhenQiByTimes", # 增加真气按一天使用次数减少
 | 
 |  |  |                             ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
 | 
 |  |  |                             ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
 | 
 |  |  |                             ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
 | 
 |  |  |                             ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
 | 
 |  |  |                             ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # 增加聚灵效率
 | 
 |  |  |                             #ChConfig.Def_Effect_AddPrestige:"Item_AddPrestige",  # 给人物威望
 | 
 |  |  |                             #ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach",  # 弹劾符
 | 
 |  |  |                             #ChConfig.Def_Effect_ClothesCoatSkin:"Item_ClothesCoatSkin", #激活时装皮肤
 | 
 |  |  | 
 |  |  | #        return
 | 
 |  |  |     
 | 
 |  |  |     #职业限制
 | 
 |  |  |     if not ItemCommon.JobUseable(curPlayer, curItem):
 | 
 |  |  |     if not ItemCommon.CheckJob(curPlayer, curItem):
 | 
 |  |  |         PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_31379")
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     #物品使用等级检查
 | 
 |  |  |     if not ItemControler.CheckItemUseLV(curPlayer, curItem):
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     #使用物品检查是否满足属性
 | 
 |  |  |     if not ItemControler.CheckItemAttrLimit(curPlayer, curItem):
 | 
 |  |  |         PlayerControl.NotifyCode(curPlayer, "itemuse_andyshao_671654")
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  | #===============================================================================
 | 
 |  |  | 
 |  |  |         PlayerControl.NotifyCode(curPlayer, "UseResLost10")
 | 
 |  |  |         return False
 | 
 |  |  |     
 | 
 |  |  |     #绑定物品不可掉落
 | 
 |  |  |     #绑定物品不可丢弃
 | 
 |  |  |     if curItem.GetIsBind():
 | 
 |  |  |         PlayerControl.NotifyCode(curPlayer, "UseResLost10")
 | 
 |  |  |         return False
 | 
 |  |  | 
 |  |  |     curItem = curPack.GetAt(itemIndex)
 | 
 |  |  |     
 | 
 |  |  |     #物品不存在
 | 
 |  |  |     if not ItemCommon.CheckItemCanUse(curItem):
 | 
 |  |  |     if not ItemCommon.CheckItemCanUse(curItem) or ItemControler.GetIsAuctionItem(curItem):
 | 
 |  |  |         return
 | 
 |  |  | 
 | 
 |  |  |     #检查物品可否丢弃
 | 
 |  |  | 
 |  |  |         GameWorld.DebugLog("    物品无法使用!")
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     # 使用拍品
 | 
 |  |  |     if ItemControler.GetIsAuctionItem(curItem):
 | 
 |  |  |         GameWorld.DebugLog("玩家使用拍品: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID())
 | 
 |  |  |         ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     if useCnt <= 0:
 | 
 |  |  |         useCnt = curItem.GetCount()
 | 
 |  |  |         GameWorld.DebugLog("    没指定使用个数,默认使用全部=%s" % useCnt)
 | 
 |  |  | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | #---------------------------------------------------------------------
 | 
 |  |  | 
 | 
 |  |  | def DoMapDropItem(curPlayer, itemList, npcID, dropPosX, dropPosY, isOnlySelfSee=True, isDropDisperse=True):
 | 
 |  |  |     if not itemList:
 | 
 |  |  |         return
 | 
 |  |  |     if isDropDisperse:
 | 
 |  |  |         dropItemList = []
 | 
 |  |  |         for itemInfo in itemList:
 | 
 |  |  |             if isinstance(itemInfo, list):
 | 
 |  |  |                 itemID, itemCount, isAuctionItem = itemInfo
 | 
 |  |  |                 # 拍品不拆
 | 
 |  |  |                 if isAuctionItem:
 | 
 |  |  |                     dropItemList.append(itemInfo)
 | 
 |  |  |                     continue
 | 
 |  |  |                 for _ in xrange(itemCount):
 | 
 |  |  |                     dropItemList.append([itemID, 1, isAuctionItem])
 | 
 |  |  |             else:
 | 
 |  |  |                 dropItemList.append(itemInfo)
 | 
 |  |  |     else:
 | 
 |  |  |         dropItemList = itemList
 | 
 |  |  |          | 
 |  |  |     random.shuffle(dropItemList) # 打乱顺序
 | 
 |  |  |     index = 0
 | 
 |  |  |     playerID = curPlayer.GetPlayerID()
 | 
 |  |  |     gameMap = GameWorld.GetMap()
 | 
 |  |  |     for posX, posY in ChConfig.Def_DropItemAreaMatrix:
 | 
 |  |  |         resultX = dropPosX + posX
 | 
 |  |  |         resultY = dropPosY + posY
 | 
 |  |  |          | 
 |  |  |         if not gameMap.CanMove(resultX, resultY):
 | 
 |  |  |             #玩家不可移动这个点
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         if index > len(dropItemList) - 1:
 | 
 |  |  |             break
 | 
 |  |  |          | 
 |  |  |         curItem = dropItemList[index]
 | 
 |  |  |         index += 1
 | 
 |  |  |         if isinstance(curItem, list):
 | 
 |  |  |             itemID, itemCount, isAuctionItem = curItem
 | 
 |  |  |             curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer)
 | 
 |  |  |              | 
 |  |  |         if not curItem:
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         AddMapDropItem(resultX, resultY, curItem, ownerInfo=[ChConfig.Def_NPCHurtTypePlayer, playerID],  | 
 |  |  |                        dropNPCID=npcID, isOnlySelfSee=isOnlySelfSee)     | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 在地上添加物品(统一接口)
 | 
 |  |  | #  @param itemPosX 位置x
 | 
 |  |  | #  @param itemPosY 位置y
 | 
 |  |  | 
 |  |  |         curMapItem.SetOwnerType(ownerType)
 | 
 |  |  |         curMapItem.SetOwnerID(ownerID)
 | 
 |  |  |         
 | 
 |  |  |     #GameWorld.DebugLog("AddMapDropItem ID=%s,ownerType=%s,ownerID=%s,GetDropTick=%s,isBind=%s"  | 
 |  |  |     #                   % (curMapItem.GetID(), ownerType, ownerID, curMapItem.GetDropTick(), curItem.GetIsBind()))
 | 
 |  |  |     if dropNPCID:
 | 
 |  |  |         itemNoteDict = ItemCommon.GetItemNoteDict(curItem, curItem.GetCount())
 | 
 |  |  |         GameWorld.Log("AddMapDropItem mapItemID=%s,ownerType=%s,ownerID=%s,mapItemDataStr=%s,itemNoteDict=%s"  | 
 |  |  |                       % (curMapItem.GetID(), curMapItem.GetOwnerType(), curMapItem.GetOwnerID(), itemDataStr, itemNoteDict))
 | 
 |  |  |     return curMapItem
 | 
 |  |  | 
 | 
 |  |  | def GetMapDropItemDataStr(curItem, effIndex=0, ownerInfo=[], dropNPCID=0, isOnlySelfSee=False):
 | 
 |  |  | 
 |  |  | #  @return 
 | 
 |  |  | def EquipAddAdditionEx(curItem, equipData):
 | 
 |  |  |     # 绑定
 | 
 |  |  |     if equipData.isBind:
 | 
 |  |  |         ItemControler.SetItemIsBind(curItem, equipData.isBind)
 | 
 |  |  |     #if equipData.isBind:
 | 
 |  |  |     #    ItemControler.SetItemIsBind(curItem, equipData.isBind)
 | 
 |  |  |     
 | 
 |  |  |     if not ItemCommon.CheckItemIsEquip(curItem):
 | 
 |  |  |         return
 | 
 |  |  | 
 |  |  |     #===========================================================================
 | 
 |  |  |            
 | 
 |  |  |     # 套装
 | 
 |  |  |     if equipData.isSuite:
 | 
 |  |  |         curItem.SetIsSuite(equipData.isSuite)
 | 
 |  |  |     if equipData.suiteLV:
 | 
 |  |  |         curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV)
 | 
 |  |  |     #if equipData.isSuite:
 | 
 |  |  |     #    curItem.SetIsSuite(equipData.isSuite)
 | 
 |  |  |     #if equipData.suiteLV:
 | 
 |  |  |     #    curItem.SetUserAttr(ShareDefine.Def_IudetSuiteLV, equipData.suiteLV)
 | 
 |  |  |     # 物品来源
 | 
 |  |  |     if equipData.source:
 | 
 |  |  |         curItem.SetUserAttr(ShareDefine.Def_IudetSource, equipData.source)
 | 
 |  |  | 
 |  |  |     Def_Discount_ItemType,    #折扣卡物品类型
 | 
 |  |  |     Def_SelectMore_ItemType   #多选礼包物品类型
 | 
 |  |  | ) = range(2)
 | 
 |  |  | 
 | 
 |  |  | #//A3 21 使用特殊运营物品 #tagCMUseSpecialItem
 | 
 |  |  | #
 | 
 |  |  | #struct tagCMUseSpecialItem
 | 
 |  |  | #{
 | 
 |  |  | #    tagHead        Head;
 | 
 |  |  | #    BYTE        SpeicalItemType;   //特殊运营物品类型,0打折卡,1多选礼包
 | 
 |  |  | #    int        ItemID;                  //物品ID
 | 
 |  |  | #    BYTE        ItemIndex;            //物品在背包中的索引位置
 | 
 |  |  | #    BYTE        Select;                 //选择,只对多选礼包有用     | 
 |  |  | #};
 | 
 |  |  | ## 使用特殊运营物品(封包参数)     | 
 |  |  | #  @param index 玩家索引
 | 
 |  |  | #  @param packData 接收到的封包数据
 | 
 |  |  | #  @param tick 当前时间
 | 
 |  |  | #  @return None
 | 
 |  |  | def OnUseSpecialItem(index, packData, tick):
 | 
 |  |  | #    #GameWorld.Log("OnUseSpecialItem")
 | 
 |  |  | #    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  | #    specialItemType = packData.SpeicalItemType
 | 
 |  |  | #    itemID = packData.ItemID
 | 
 |  |  | #    itemIndex = packData.ItemIndex
 | 
 |  |  | #    selectIndex = packData.Select
 | 
 |  |  | #     | 
 |  |  | #    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
 | 
 |  |  | #    curItem = curPack.GetAt(itemIndex)
 | 
 |  |  | #    if curItem.GetItemTypeID() != itemID:
 | 
 |  |  | #        GameWorld.Log("使用特殊运营物品失败,物品ID不一致")
 | 
 |  |  | #        return
 | 
 |  |  | #    isBind = curItem.GetIsBind()#继承被使用物品的绑定属性,先记录
 | 
 |  |  | #    itemName = curItem.GetName()
 | 
 |  |  | #     | 
 |  |  | #    needGold = 0  #需要消耗多少钻石
 | 
 |  |  | #    itemInfoList = []
 | 
 |  |  | #    useMoneyInfo = ""
 | 
 |  |  | #    #如果是打折卡类型
 | 
 |  |  | #    if specialItemType == Def_Discount_ItemType:
 | 
 |  |  | #        #GameWorld.Log("处理打折卡物品类型")
 | 
 |  |  | #        discountItem = ReadChConfig.GetEvalChConfig("DiscountItem")
 | 
 |  |  | #        #GameWorld.Log("读取到的打折卡物品配置信息=%s"%discountItem)
 | 
 |  |  | #        itemSetInfo = discountItem.get(itemID, None)
 | 
 |  |  | #        if not itemSetInfo:
 | 
 |  |  | #            GameWorld.ErrLog("折扣卡,没有找到对应物品的配置信息,物品ID:%s"%itemID)
 | 
 |  |  | #            return
 | 
 |  |  | #        needGold, itemInfo = itemSetInfo
 | 
 |  |  | #        itemInfoList.append(itemInfo)
 | 
 |  |  | #        useMoneyInfo = "UseSpecialItem_Discount"
 | 
 |  |  | #    else:
 | 
 |  |  | #        #GameWorld.Log("处理多选礼包物品类型")
 | 
 |  |  | #        selectMoreItem = ReadChConfig.GetEvalChConfig("SelectMoreItem")
 | 
 |  |  | #        #GameWorld.Log("读取到的多选礼包物品配置信息=%s"%selectMoreItem)
 | 
 |  |  | #        itemSetInfo = selectMoreItem.get(itemID, None)
 | 
 |  |  | #        if not itemSetInfo:
 | 
 |  |  | #            GameWorld.ErrLog("多选礼包,没有找到对应物品的配置信息,物品ID:%s"%itemID)
 | 
 |  |  | #            return
 | 
 |  |  | #        if selectIndex < 0 or selectIndex >= len(itemSetInfo):
 | 
 |  |  | #            GameWorld.ErrLog("多选礼包,选择索引越界,物品ID:%s 选择索引:%s"%(itemID, selectIndex))
 | 
 |  |  | #            return
 | 
 |  |  | #        itemSetInfo = itemSetInfo[selectIndex]
 | 
 |  |  | #        needGold, itemInfoList = itemSetInfo
 | 
 |  |  | #        useMoneyInfo = "UseSpecialItem_SelectMore"
 | 
 |  |  | #    #GameWorld.Log("needGold=%s  itemInfoList=%s"%(needGold, itemInfoList))
 | 
 |  |  | #     | 
 |  |  | #    #钻石不足
 | 
 |  |  | #    if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold):
 | 
 |  |  | #        GameWorld.ErrLog("钻石不足")
 | 
 |  |  | #        return
 | 
 |  |  | #    #背包剩余空间
 | 
 |  |  | #    packSpace = ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
 | 
 |  |  | #    if packSpace < len(itemInfoList):
 | 
 |  |  | #        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
 | 
 |  |  | #        GameWorld.ErrLog("背包空间不足")
 | 
 |  |  | #        return
 | 
 |  |  | #    #给物品
 | 
 |  |  | #    for itemInfo in itemInfoList:
 | 
 |  |  | #        newItemId, itemCount, bind, isAppoint = itemInfo
 | 
 |  |  | #        makeItemID = newItemId
 | 
 |  |  | #        #是定制物品
 | 
 |  |  | #        if isAppoint:
 | 
 |  |  | #            appointItemList = PyMapTable.GetPyMapTable("AppointItemList")   #定制物品列表
 | 
 |  |  | #            itemData = appointItemList.GetRecord("ItemIndex", str(newItemId))
 | 
 |  |  | #            if not itemData:
 | 
 |  |  | #                GameWorld.ErrLog("使用特殊运营物品 找不到定制物品数据, itemID = %s"%newItemId)
 | 
 |  |  | #                return False
 | 
 |  |  | #             | 
 |  |  | #            if len(itemData) != 1:
 | 
 |  |  | #                GameWorld.ErrLog("使用特殊运营物品 定制表配置的数据有误, itemID = %s"%newItemId)
 | 
 |  |  | #                return False
 | 
 |  |  | #             | 
 |  |  | #            itemDictData = itemData[0]
 | 
 |  |  | #            makeItemID = int(itemDictData['ItemID'])
 | 
 |  |  | #            itemCount = 1
 | 
 |  |  | #            itemDictData['IsBind'] = isBind
 | 
 |  |  | #            if not ItemControler.GivePlayerEquip(curPlayer, itemDictData, False,  | 
 |  |  | #                                                 [IPY_GameWorld.rptItem]):
 | 
 |  |  | #                GameWorld.ErrLog("使用特殊运营物品 给予定制物品失败")
 | 
 |  |  | #                return
 | 
 |  |  | #        else:
 | 
 |  |  | #            #给予物品
 | 
 |  |  | #            if not ItemControler.GivePlayerItem(curPlayer, newItemId, itemCount, isBind,  | 
 |  |  | #                                         [IPY_GameWorld.rptItem], False):
 | 
 |  |  | #                GameWorld.ErrLog("使用特殊运营物品 给予普通物品失败")
 | 
 |  |  | #                return
 | 
 |  |  | #        #PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [makeItemID, itemCount])
 | 
 |  |  | #     | 
 |  |  | #    #扣除物品
 | 
 |  |  | #    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
 | 
 |  |  | #    #扣除物品
 | 
 |  |  | #    ItemCommon.ReduceItem(curPlayer, itemPack, [itemIndex], 1, False)
 | 
 |  |  | #     | 
 |  |  | #    #扣金钱
 | 
 |  |  | #    addDataDict = {"SpecialItemType":specialItemType, "UseItemID":itemID, "SelectIndex":selectIndex, ChConfig.Def_Cost_Reason_SonKey:itemName}
 | 
 |  |  | #    PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, ChConfig.Def_Cost_GiftBag, addDataDict)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | #// A3 07 过期物品续费 #tagCMItemRenew
 | 
 |  |  | #
 | 
 |  |  | 
 |  |  |         return
 | 
 |  |  |     #先删原物品再给新物品
 | 
 |  |  |     ItemCommon.DelItem(curPlayer, timeOutItem, 1, False, "RenewItem")
 | 
 |  |  |     ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, True, [IPY_GameWorld.rptItem])
 | 
 |  |  |     ItemControler.GivePlayerItem(curPlayer, changeItemID, 1, 0, [IPY_GameWorld.rptItem])
 | 
 |  |  |     PlayerControl.NotifyCode(curPlayer, 'Guardian_ContinuePay')
 | 
 |  |  |     return | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | #// A3 08 物品过期 #tagCMItemTimeout
 | 
 |  |  | #
 | 
 |  |  | #struct    tagCMItemTimeout
 | 
 |  |  | #
 | 
 |  |  | #{
 | 
 |  |  | #    tagHead        Head;
 | 
 |  |  | #    BYTE        PackType;        //背包类型
 | 
 |  |  | #    BYTE        ItemIndex;        //物品在背包中索引
 | 
 |  |  | #};
 | 
 |  |  | def OnItemTimeout(index, clientData, tick):
 | 
 |  |  |     packType = clientData.PackType
 | 
 |  |  |     itemIndex = clientData.ItemIndex
 | 
 |  |  |      | 
 |  |  |     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  |     backPack = curPlayer.GetItemManager().GetPack(packType)
 | 
 |  |  |     if not backPack:
 | 
 |  |  |         return
 | 
 |  |  |     curItem = backPack.GetAt(itemIndex)
 | 
 |  |  |     if not ItemCommon.CheckItemCanUse(curItem):
 | 
 |  |  |         GameWorld.DebugLog("物品不存在!")
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     # 拍品
 | 
 |  |  |     if ItemControler.GetIsAuctionItem(curItem):
 | 
 |  |  |         GameWorld.DebugLog("玩家拍品过期: itemID=%s" % (curItem.GetItemTypeID()), curPlayer.GetPlayerID())
 | 
 |  |  |         ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |      | 
 |  |  |     return
 |