hxp
6 天以前 0b314dd1d9f0c39e8d86de7e996c62836aa19aca
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -37,18 +37,15 @@
import UseItem
import ItemCommon
import ChConfig
import EventShell
import PlayerControl
import FBLogic
import ReadChConfig
import OperControlManager
import ShareDefine
import PlayerAttrFruit
import DataRecordPack
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
import PlayerSuccess
import PyGameData
import NPCCommon
import FBCommon
@@ -111,7 +108,7 @@
#===============================================================================
def __Func_InitItem(tick):
    #初始化物品掉落保护
    MapItemProtectTime = IpyGameDataPY.GetFuncCfg("MapItemProtectTime")
    MapItemProtectTime = 120000 #IpyGameDataPY.GetFuncCfg("MapItemProtectTime")
    GameWorld.GetMapItemManager().SetProtectTime(MapItemProtectTime)
    
    #===============================================================================================
@@ -149,7 +146,7 @@
#  @param tick 当前时间
#  @return None or True
#  @remarks 函数详细说明.
def __DoPickup(curPlayer, mapItemID, tick, isGuard):
def __DoPickup(curPlayer, mapItemID, tick):
    
    playerID = curPlayer.GetPlayerID()
    mapItemManager = GameWorld.GetMapItemManager()
@@ -159,12 +156,6 @@
        return
    dropItemNPCID = GetMapItemUserDataValue(mapItem, ShareDefine.Def_MapItemInfo_NPCID)
    
    #镖车中,无法拾取
    if not isGuard and curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck:
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_21675")
        GameWorld.Log("使用交通工具时,无法拾取物品!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID)
        return
    if GameObj.GetHP(curPlayer) == 0:
        #玩家已经死亡
        GameWorld.Log("玩家已死亡,无法拾取物品!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID)
@@ -173,7 +164,7 @@
    posX, posY, itemPosX, itemPosY = curPlayer.GetPosX(), curPlayer.GetPosY(), mapItem.GetPosX(), mapItem.GetPosY()
    pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY)
    # 守护拾取不验证拾取范围
    if not isGuard and pickDist > curPlayer.GetPickupDist():
    if pickDist > curPlayer.GetPickupDist():
        #距离过远, 不能捡起
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
        GameWorld.Log("当前距离过远, mapItemID=%s,dropItemNPCID=%s,玩家(%d,%d)-物品(%d,%d),pickDist=%s > playerPickupDist=%s" 
@@ -197,8 +188,6 @@
    mapItemCount = singItem.GetCount()
    singItemGUID = singItem.GetGUID()
    curEffID = singItem.GetEffectByIndex(0).GetEffectID()
    playerTeam = curPlayer.GetTeam()
    #isTeamNotify = (ownerType == ChConfig.Def_NPCHurtTypeTeam and playerTeam != None)
    isTeamNotify = False
    # 拾取金钱
    if mapItemType == ChConfig.Def_ItemType_Money:
@@ -206,10 +195,6 @@
                                       ChConfig.Def_GiveMoney_Pickup, {}, not isTeamNotify):
            return
        
        # 提示获得金钱数量
        if isTeamNotify:
            PlayerControl.TeamNotify(playerTeam.GetTeamID(), "GeRen_lhs_295695", [curPlayer.GetName(),
                                                                                   mapItemCount])
        # 副本拾取金钱
        FBLogic.OnFBPickUpItem(curPlayer, singItem, tick)
        singItem.Clear()
@@ -271,8 +256,8 @@
            mapID = GameWorld.GetGameWorld().GetMapID()
            lineID = 0 if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull else PlayerControl.GetFBFuncLineID(curPlayer)
            #合并地图的,使用前端lineID,即 FBID
            if mapID in [ChConfig.Def_FBMapID_BossHome]:
                lineID = curPlayer.GetClientLineID()
            #if mapID in [ChConfig.Def_FBMapID_BossHome]:
            #    lineID = curPlayer.GetClientLineID()
            NPCCommon.SendGameServerGoodItemRecord(curPlayer, mapID, lineID, dropItemNPCID, curItemID, equipInfo)
            
        # 不需要队伍提示
@@ -284,11 +269,6 @@
        #    PickupItemSysNotify(curPlayer, isTeamNotify, itemMsgList, isEquip)
        #=======================================================================
        
        #响应事件
        EventShell.EventRespons_OnGet(curPlayer, mapItemTypeID)
        #成就
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PickUpItem, curItemCount, [curItemID])
    #物品已经被捡起, 把物品指针置为空
    mapItem.SetDropItem(None)
    #通知客户端, 人物捡起该物品, 以及回收物品的逻辑
@@ -315,20 +295,6 @@
    return
#---------------------------------------------------------------------
#// A3 12 守护拾取物品 #tagCMGuardPickupItem
#
#struct    tagCMGuardPickupItem
#{
#    tagHead        Head;
#    WORD        ItemCount;
#    WORD        MapItemID[ItemCount];    //size = ItemCount
#};
def OnGuardPickupItem(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    mapItemIDList = clientData.MapItemID
    __DoPickupItem(curPlayer, mapItemIDList, tick, True)
    return
## 玩家拾取物品(封包参数)
#  @param index 当前玩家索引
#  @param tick 当前时间
@@ -339,103 +305,23 @@
    #玩家捡起物品
    pickPack = IPY_GameWorld.IPY_PickUpItem()
    mapItemID = pickPack.GetMapItemID()
    __DoPickupItem(curPlayer, [mapItemID], tick, False)
    __DoPickupItem(curPlayer, [mapItemID], tick)
    return
def __DoPickupItem(curPlayer, mapItemIDList, tick, isGuard):
    # @param isGuard: 是否守护拾取
    if isGuard and GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
        mapID = curPlayer.GetMapID()
        fbIpyData = FBCommon.GetFBIpyData(mapID)
        if fbIpyData and not fbIpyData.GetGuardPick():
            GameWorld.Log("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
            return
#    #单人副本一键拾取
#    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtSingle:
#        SingleFBTPickUP(curPlayer, mapItemID, tick)
#        return
def __DoPickupItem(curPlayer, mapItemIDList, tick):
    if not mapItemIDList:
        GameWorld.ErrLog("没有指定要拾取的地图物品ID!", curPlayer.GetPlayerID())
        return
    
    succMapItemIDList = [] # 成功拾取的地图物品
    for mapItemID in mapItemIDList:
        if __DoPickup(curPlayer, mapItemID, tick, isGuard):
        if __DoPickup(curPlayer, mapItemID, tick):
            succMapItemIDList.append(mapItemID)
            
    if succMapItemIDList:
        GameWorld.Log("成功拾取地图物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
    # 守护拾取的,附加同步守护拾取结果
    if isGuard and succMapItemIDList:
        guradPickupSucc = ChPyNetSendPack.tagMCGuradPickupItemSucc()
        guradPickupSucc.MapItemID = succMapItemIDList
        guradPickupSucc.ItemCount = len(guradPickupSucc.MapItemID)
        NetPackCommon.SendFakePack(curPlayer, guradPickupSucc)
# 玩家拾取结果目前客户端暂时无用,不通知
#    if not __DoPickup(curPlayer, mapItemID, tick):
#        curPlayer.Notify_PickupItemResult(mapItemID, 0)
#    else:
#        curPlayer.Notify_PickupItemResult(mapItemID, 1)
    return
###单人副本一键拾取
## @param curPlayer mapItemID
## @return None
#def SingleFBTPickUP(curPlayer, mapItemID, tick):
#    mapItemManager = GameWorld.GetMapItemManager()
#    curMapItem = mapItemManager.GetItemByID(mapItemID)
#    if curMapItem == None or curMapItem.IsEmpty():
#        return
#
#    posX = curPlayer.GetPosX()
#    posY = curPlayer.GetPosY()
#    itemPosX = curMapItem.GetPosX()
#    itemPosY = curMapItem.GetPosY()
#
#    pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY)
#
#    if pickDist > curPlayer.GetPickupDist():
#        #距离过远, 不能捡起
#        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
#        return
#
#    mapItemIDList = [curMapItem.GetID()]
#    #拾取当前格子周围的物品
#    mapItemManager = GameWorld.GetMapItemManager()
#    for index in range(mapItemManager.GetMapItemCount()):
#        mapItem = mapItemManager.GetMapItemByIndex(index)
#        if not mapItem or mapItem.IsEmpty():
#            continue
#
#        mapItemObjID = mapItem.GetID()
#        if mapItemObjID in mapItemIDList:
#            continue
#
#        curItem = mapItem.GetItem()
#        # 只一键拾取金钱
#        if curItem.GetType() != ChConfig.Def_ItemType_Money:
#            continue
#
#        pickDist = GameWorld.GetDist(posX, posY, mapItem.GetPosX(), mapItem.GetPosY())
#
#        if pickDist > curPlayer.GetPickupDist():
#            continue
#
#        mapItemIDList.append(mapItemObjID)
#
#    for mapItemID in mapItemIDList:
#        if not __DoPickup(curPlayer, mapItemID, tick):
#            curPlayer.Notify_PickupItemResult(mapItemID, 0)
#        else:
#            curPlayer.Notify_PickupItemResult(mapItemID, 1)
#
#    return
#---------------------------------------------------------------------
## 玩家使用物品 ->自身效果(封包参数)
#  @param index 当前玩家索引
@@ -471,12 +357,12 @@
def __DoLogic_PlayerUseItemSelf(curPlayer, useItemIndex, tick, useCnt=1, exData=0):
    
    #使用物品行为状态, 判断客户端限制
    if not OperControlManager.IsObjCanDoAction(
                                        curPlayer,
                                        ChConfig.Def_Obj_ActState_ClientAct,
                                        IPY_GameWorld.oalUseItem
                                        ):
        return False
    #if not OperControlManager.IsObjCanDoAction(
    #                                    curPlayer,
    #                                    ChConfig.Def_Obj_ActState_ClientAct,
    #                                    IPY_GameWorld.oalUseItem
    #                                    ):
    #    return False
    #------------------封包参数 获得 玩家物品
    backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
@@ -506,9 +392,6 @@
                       % (curItemTypeID, useResult, isOK, successCnt))    
    if not isOK:
        return False
    #------------使用物品成功, 执行相关操作
    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseItem, successCnt, [curItemTypeID])
    
    curPlayer.Sync_UseItem(curItemTypeID, useItemIndex)
    curPlayer.SetItemCD(curItemCDType, tick)
@@ -577,13 +460,13 @@
        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)
    #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)
    
    canUseCnt = max(0, maxCnt - useCnt)
    
@@ -657,15 +540,6 @@
        #这个物品不是一般物品, 直接返回结果
        return useSpecialItemResult
    
    #---特殊装备不验证装备属性, 普通物品要验证装备属性---
    itemControler = ItemControler.PlayerItemControler(curPlayer)
    #装备无法使用
    if itemControler.PlayerCanEquipItem(curItem, False):
        #这个物品是装备
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045")
        return
    #物品类型ID
    itemTypeID = curItem.GetItemTypeID()
    
@@ -692,10 +566,6 @@
#  @return None or True
#  @remarks 函数详细说明.
def __DealWith_SpecialItem(curPlayer, curItem, tick, useCnt, exData):
    #果实物品
    useFruitResult = PlayerAttrFruit.DoPlayerEatFruitItem(curPlayer, curItem, useCnt)
    if useFruitResult != -1:
        return useFruitResult
    
    #------------------------获得物品相关属性
    itemTypeID = curItem.GetItemTypeID()  #物品类型id
@@ -719,31 +589,27 @@
    #根据物品效果使用{物品效果ID:call的py名}
    itemEffIdCallFuncDic = {
                            ChConfig.Def_Effect_UseItemGiveZhenQi:"Item_UseItemGiveZhenQi", # 使用道具给予真气
                            ChConfig.Def_Effect_AddDienstgrad:"Item_AddDienstgrad", #道具获得称号
                            ChConfig.Def_Effect_Face:"Item_Face",
                            ChConfig.Def_Effect_FacePic:"Item_Face",
                            ChConfig.Def_Effect_ItemAddLV:"Item_AddLV", #升级道具
                            ChConfig.Def_Effect_TJGAddTime:"Item_TJGAddTime", #增加脱机挂时间
                            ChConfig.Def_Effect_GuajiAward:"Item_GuajiAward", #直接给挂机收益
                            ChConfig.Def_Effect_CleanGuilt:"Item_CleanGuilt", # 洗红名
                            ChConfig.Def_Effect_PrizeCoin:"Item_PrizeCoin", # 奖励充值点券
                            ChConfig.Def_Effect_AddVIPExp:"Item_AddVIPExp", # 增加VIP经验
                            ChConfig.Def_Effect_VIPLVCard:"Item_VIPLVCard", # VIP等级直升卡
                            ChConfig.Def_Effect_TiandaoQiyun:"Item_TiandaoQiyun", # 天道树气运
                            ChConfig.Def_Effect_GubaoPiece:"Item_GubaoPiece", # 古宝碎片效果ID
                            ChConfig.Def_Effect_TrainRealmLV:"Item_TrainRealmLV", # 境界培养卡
                            ChConfig.Def_Effect_ResetBossKillCnt:"Item_ResetBossKillCnt", # 重置boss击杀疲劳
                            ChConfig.Def_Effect_AddFBCnt:"Item_AddFBCnt", # 增加副本可进入次数
                            ChConfig.Def_Effect_AddArenaBattleCount:"Item_AddArenaBattleCount", # 增加竞技场挑战次数
                            ChConfig.Def_Effect_AddKillBossCnt:"Item_AddKillBossCnt", # 增加BOSS可击杀次数
                            ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
                            ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
                            ChConfig.Def_Effect_EmojiPack:"Item_EmojiPack",
                            ChConfig.Def_Effect_FamilyEmblem:"Item_FamilyEmblem",
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # 增加聚灵效率
                            ChConfig.Def_Effect_TouchMission:"Item_TouchMission",  # 触发任务接口
                            ChConfig.Def_Effect_HeroSkin:"Item_HeroSkin",  # 武将皮肤
                            ChConfig.Def_Effect_FamilyTaofaCnt:"Item_FamilyTaofaCnt",  # 增加公会讨伐次数
                            #ChConfig.Def_Effect_AddArenaBattleCount:"Item_AddArenaBattleCount", # 增加竞技场挑战次数
                            #ChConfig.Def_Effect_FamilyImpeach:"Item_FamilyImpeach",  # 弹劾符
                            #ChConfig.Def_Effect_ClothesCoatSkin:"Item_ClothesCoatSkin", #激活时装皮肤
                            #ChConfig.Def_Effect_AddOfficialExp:"Item_AddOfficialExp", # 增加爵位经验
@@ -905,30 +771,25 @@
#  @return 布尔值
#  @remarks 检查使用物品的玩家属性.
def CheckUseItemSelf_Player(curPlayer):
    if GameObj.GetHP(curPlayer) <= 0 :
        return False
    #if GameObj.GetHP(curPlayer) <= 0 :
    #    return False
    
#    #眩晕时, 不可使用物品
#    if curPlayer.GetAbnormalState() == IPY_GameWorld.sctFaint:
#        return False
    
    #使用物品行为状态, 判断服务端限制
    if not OperControlManager.IsObjCanDoAction(
                                        curPlayer,
                                        ChConfig.Def_Obj_ActState_ServerAct,
                                        IPY_GameWorld.oalUseItem
                                        ):
        return False
    #在镖车中, 不可使用物品
    if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck :
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_0")
        return False
    #if not OperControlManager.IsObjCanDoAction(
    #                                    curPlayer,
    #                                    ChConfig.Def_Obj_ActState_ServerAct,
    #                                    IPY_GameWorld.oalUseItem
    #                                    ):
    #    return False
    
    #交易状态, 不可使用物品
    if curPlayer.GetPlayerAction() == IPY_GameWorld.paTrade:
        PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_372238")
        return False
    #if curPlayer.GetPlayerAction() == IPY_GameWorld.paTrade:
    #    PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_372238")
    #    return False
    
#    #GM禁止使用
#    if GameWorld.IsGM(curPlayer):
@@ -982,11 +843,6 @@
    
    if ItemControler.IsEventItem(curItem):
        PlayerControl.NotifyCode(curPlayer, "itemuse_chenxin_31379")
        return
    #玩家在镖车中,不能使用物品
    if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck:
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_0")
        return
    
#    #玩家事件中, 不能使用物品
@@ -1409,96 +1265,6 @@
def GetBackItemInFabao(index , tick):
    return
##===============================================================================
##07 24   tagCDingDianTransport
#
### 定点(城市)传送 和 洞穴传送 (收包参数)
##  @param index 玩家索引
##  @param tick 当前时间
##  @return None
##  @remarks 函数详细说明.
#def PointTransport(index, tick):
#    return
#    packUseItem = IPY_GameWorld.IPY_CDingDianTransport()
#    useItemIndex = packUseItem.GetItemIndex()
#    transportIndex = packUseItem.GetTransportIndex()
#
#    #获得玩家使用的物品
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    backPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
#    curItem = backPack.GetAt(useItemIndex)
#
#    #检查玩家状态和物品
#    if not CheckUseTransformItem(curPlayer, curItem, tick):
#        return
#
#    #判断属于哪种传送
#    effIndex = curItem.GetEffectByIndex(0)
#    curEffID = effIndex.GetEffectID()
#
#    #CD验证
#    if (tick - curPlayer.GetItemCDStartTime(curEffID)) < curItem.GetCDTime():
#        #CD冷却时间未到
#        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_749572")
#        return
#
#    #判断并执行传送
#    if not __DoTransport(curPlayer, curItem, curEffID, transportIndex, useItemIndex, tick):
#        return
#
### 执行传送
##  @param curPlayer 当前玩家
##  @param curItem 使用物品
##  @param curEffID 当前效果
##  @param transportIndex 传送点索引
##  @param useItemIndex 使用的物品索引
##  @param tick 当前时间
##  @return None
##  @remarks 函数详细说明.
#def __DoTransport(curPlayer, curItem, curEffID, transportIndex, useItemIndex, tick):
#    #定点列表
#    cityPosList = ReadChConfig.GetEvalChConfig('Def_List_City_Pos')
#    #山洞列表
#    cavePosList = ReadChConfig.GetEvalChConfig('Def_List_Cave_Pos')
#
#    #定点
#    if curEffID == ChConfig.Def_Item_150_Effect:
#        posList = cityPosList
#    #山洞
#    elif curEffID == ChConfig.Def_Item_152_Effect:
#        posList = cavePosList
#    else:
#        GameWorld.Log('###非法使用物品,效果值%s'%(curEffID,), curPlayer.GetPlayerID())
#        return
#
#    #检查越界
#    if transportIndex < 0 or transportIndex >= len(posList):
#        GameWorld.Log('###定点传送越界--%s'%(transportIndex))
#        return
#
#    #目标地图判断
#    if not PlayerControl.CheckTagCountry(curPlayer, posList[transportIndex][0]):
#        return
#
#    itemID = curItem.GetItemTypeID()
#
#
#    #使用xx一个
#    PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID, 1])
#    #通知客户端
#    curPlayer.Sync_UseItem(itemID, useItemIndex)
#    curPlayer.SetItemCD(curItem.GetCDType(), tick)
#
#    #扣除物品(先记录再删除,避免底层已经删除此物品)
#    curItem.SetCount(curItem.GetCount() - 1)
#
#    #判断成功,进行传送
#    PlayerControl.PlayerResetWorldPos(curPlayer, posList[transportIndex][0], posList[transportIndex][1], posList[transportIndex][2], False)
#
#    #传送XX地点提示
#    PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [posList[transportIndex][0]])
#---------------------------------------------------------------------
#===============================================================================
# //07 26 有对象的使用物品#tagCUseItemTag
# tagCUseItemTag       *   GettagCUseItemTag();
@@ -1614,23 +1380,6 @@
    return
def SendUseItemGetItemResult(curPlayer, useItemID, useCount, getItemInfo, moneyType=0, moneyCount=0):
    # 通知客户端使用物品结果包
    # @param getItemInfo: [{"ItemID":物品ID, "Count":个数, "IsBind":是否绑定, "IsSuite":是否套装化, "UserData":"自定义属性字符串"}, ...]
    getItemInfo = json.dumps(getItemInfo, ensure_ascii=False)
    getItemInfo = getItemInfo.replace(" ", "")
    getItemPack = ChPyNetSendPack.tagMCNotifyUseItemGetItem()
    getItemPack.Clear()
    getItemPack.UseItemID = useItemID
    getItemPack.UseCount = useCount
    getItemPack.GetItemData = str(getItemInfo)
    getItemPack.GetItemLen = len(getItemPack.GetItemData)
    getItemPack.MoneyType = moneyType
    getItemPack.MoneyCount = moneyCount
    NetPackCommon.SendFakePack(curPlayer, getItemPack)
    return
#---------------------------------------------------------------------
## 准备结束
@@ -1650,100 +1399,6 @@
        return
    return
#---------------------------------------------------------------------
#===============================================================================
# //07 33 使用五行卷#tagCUseWuXingJuan
# tagCUseWuXingJuan       *   GettagCUseWuXingJuan();
#
# class   IPY_CUseWuXingJuan
# {
# public:
#    //物品Index
#    int      GetItemIndex();
#    //新的五行
#    int      GetNewWuXing();
# };
#===============================================================================
## 使用五行卷轴(封包参数)
#  @param index 玩家索引
#  @param tick 当前时间
#  @return None or False
#  @remarks 函数详细说明.
def UseWuXingJuan(index , tick):
    return
## 检测物品是否是五行卷轴
#  @param curItem 等待检测的物品
#  @return 布尔值
#  @remarks 函数详细说明.
#===============================================================================
# def CheckWuXingJuan(curItem):
#    if not ItemCommon.CheckItemCanUse(curItem):
#        return False
#
#    #这个物品不是五行转换卷轴
#    if curItem.GetEffectByIndex(0).GetEffectID() != ChConfig.Def_Effect_ItemWuXingJuan:
#        return False
#
#    return True
#===============================================================================
## 使用回城
#  @param curPlayer 当前玩家
#  @return None or True
#  @remarks 函数详细说明.
def UseTownPortal(curPlayer):
    #检查是否是回城卷
    itemIndex = curPlayer.GetDictByKey(ChConfig.Def_Use_Item_303_Index)
    curItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem).GetAt(itemIndex)
    #物品不存在,不是回城卷不处理
    if not ItemCommon.CheckItemCanUse(curItem) or curItem.GetItemTypeID() != 303:
        #不能获得物品ID只能写死,否则玩家移动将找不到物品,或ID不匹配
        PlayerControl.NotifyCode(curPlayer, "B66BA2D6-0B3C-4177-B3FE66153B638DD0", [303, 303])
        return
    useCount = 1
    itemID = curItem.GetItemTypeID()
    guID = curItem.GetGUID()
    dataDict = {"ItemID":itemID, "ItemCount":useCount, "IsBind":curItem.GetIsBind(),"ItemGUID":guID}
    DataRecordPack.DR_DeleteItem(curPlayer, 'UseTownPortal', dataDict)
    #物品使用减少
    if curItem.GetCount() > useCount:
        ItemControler.SetItemCount(curItem, curItem.GetCount() - useCount,
                                   curPlayer.GetID(), curPlayer.GetAccID(), curPlayer.GetPlayerName())
    else:
        curItem.Clear()
    #PlayerControl.NotifyCode(curPlayer, "LostRes", [itemID, useCount])
    playerControl = PlayerControl.PlayerControl(curPlayer)
    #把人物设置回重生点
    playerControl.SetToBornPlace()
    return True
#===============================================================================
# 07 39 使用指定数量的物品 tagCUseItemCount
# struct    tagCUseItemCount
# {
#     tagHead        Head;
#     BYTE        Type;    //物品类型
#     DWORD        Count;       //物品数量
# }
#===============================================================================
## 07 39封包 使用指定数量的物品
#  @param index 玩家索引
#  @param tick 当前时间
#  @return 无
#  @remarks 和客户端约定的类型来取得指定物品,目前用于离线挂机,扣乾坤珠
def UseOfflineTime(index, tick):
    return
#===============================================================================
# struct   tagCPetUseItemByIndex
# {
@@ -1946,80 +1601,6 @@
        infoDict[ShareDefine.Def_MapItemInfo_IsSuite] = 1
           
    return infoDict
# 特别设定:卓越物品必带武器技能增强效果,使用者请特别注意
## 装备动态属性,只用于未设置属性的singleItem,roleItem使用多次发背包刷新包
#  @param curItem 玩家实例
#  @param equipData
#  @return
def EquipAddAdditionEx(curItem, equipData):
    # 绑定
    #if equipData.isBind:
    #    ItemControler.SetItemIsBind(curItem, equipData.isBind)
    if not ItemCommon.CheckItemIsEquip(curItem):
        return
    #===========================================================================
    # # 强化等级
    # if equipData.starLV:
    #    curItem.SetItemStarLV(equipData.starLV)
    # # 打孔
    # if 0 < equipData.holeCnt <= curItem.GetMaxHoleCount():
    #    curItem.SetCanPlaceStoneCount(equipData.holeCnt)
    #
    # # 给镶嵌宝石
    # for i, stoneID in enumerate(equipData.stoneData):
    #    if i > equipData.holeCnt - 1:
    #        break
    #
    #    if stoneID <= 0:
    #        continue
    #
    #    curItem.SetStone(i, stoneID)
    #===========================================================================
    # 套装
    #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)
    # 传奇属性
    if equipData.legendAttrIDList and equipData.legendAttrValueList:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrID)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValue)
        for i in xrange(len(equipData.legendAttrIDList)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrID, equipData.legendAttrIDList[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValue, equipData.legendAttrValueList[i])
    # 传奇属性 - 神
    if equipData.legendAttrIDListShen and equipData.legendAttrValueListShen:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDShen)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueShen)
        for i in xrange(len(equipData.legendAttrIDListShen)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDShen, equipData.legendAttrIDListShen[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueShen, equipData.legendAttrValueListShen[i])
    # 传奇属性 - 仙
    if equipData.legendAttrIDListXian and equipData.legendAttrValueListXian:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDXian)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueXian)
        for i in xrange(len(equipData.legendAttrIDListXian)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDXian, equipData.legendAttrIDListXian[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueXian, equipData.legendAttrValueListXian[i])
    # 传奇属性 - 极
    if equipData.legendAttrIDListJi and equipData.legendAttrValueListJi:
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrIDJi)
        curItem.ClearUserAttr(ShareDefine.Def_IudetLegendAttrValueJi)
        for i in xrange(len(equipData.legendAttrIDListJi)):
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrIDJi, equipData.legendAttrIDListJi[i])
            curItem.AddUserAttr(ShareDefine.Def_IudetLegendAttrValueJi, equipData.legendAttrValueListJi[i])
    ItemCommon.MakeEquipGS(curItem)
    return
## 判断装备是否是可加强装备
#  @param curItem 物品实例