| | |
| | | # @remarks 函数详细说明.
|
| | | def __DoPickup(curPlayer, mapItemID, tick, isGuard):
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | mapItemManager = GameWorld.GetMapItemManager()
|
| | | mapItem = mapItemManager.GetItemByID(mapItemID)
|
| | | if mapItem == None or mapItem.IsEmpty():
|
| | | GameWorld.Log("当前物品不存在或已经被回收,玩家拾取失败,mapItemID=%s" % mapItemID, playerID)
|
| | | 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("使用交通工具时,无法拾取物品")
|
| | | GameWorld.Log("使用交通工具时,无法拾取物品!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID)
|
| | | return
|
| | |
|
| | | if curPlayer.GetHP() == 0:
|
| | | #玩家已经死亡
|
| | | #GameWorld.Log("当前玩家已经死亡")
|
| | | GameWorld.Log("玩家已死亡,无法拾取物品!mapItemID=%s,dropItemNPCID=%s" % (mapItemID, dropItemNPCID), playerID)
|
| | | return
|
| | |
|
| | | mapItemManager = GameWorld.GetMapItemManager()
|
| | | mapItem = mapItemManager.GetItemByID(mapItemID)
|
| | |
|
| | | if mapItem == None or mapItem.IsEmpty():
|
| | | GameWorld.Log("当前物品已经被回收,玩家拾取失败,mapItemID=%s" % mapItemID, curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | pickDist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), |
| | | mapItem.GetPosX(), mapItem.GetPosY())
|
| | | |
| | | 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():
|
| | | #距离过远, 不能捡起
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
|
| | | # GameWorld.Log("当前距离过远, 玩家(%d,%d)-物品(%d,%d)"%(curPlayer.GetPosX(), curPlayer.GetPosY(),
|
| | | # mapItem.GetPosX(), mapItem.GetPosY()))
|
| | | GameWorld.Log("当前距离过远, mapItemID=%s,dropItemNPCID=%s,玩家(%d,%d)-物品(%d,%d),pickDist=%s > playerPickupDist=%s" |
| | | % (mapItemID, dropItemNPCID, posX, posY, itemPosX, itemPosY, pickDist, curPlayer.GetPickupDist()), playerID)
|
| | | return
|
| | |
|
| | | #拾取判断
|
| | | if not __CheckPickUpItemTime(curPlayer , mapItem , tick):
|
| | | if not __CheckPickUpItemTime(curPlayer, mapItem, tick, mapItemID, dropItemNPCID):
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_913598")
|
| | | return
|
| | |
|
| | |
| | | # # 队伍拾取装备时,先保存物品的xml属性,用于提示的xml显示
|
| | | # itemMsgList = ItemCommon.GetItemXMLMsg(singItem)
|
| | | #=======================================================================
|
| | | |
| | | |
| | | curItemCount = singItem.GetCount()
|
| | | curItemID = singItem.GetItemTypeID()
|
| | | curItemIsBind = singItem.GetIsBind()
|
| | |
| | | # 是否可放入
|
| | | if not itemControl.CanPutInItem(packIndex, curItemID, curItemCount, curItemIsBind):
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packIndex])
|
| | | GameWorld.Log("拾取物品无法放入背包!mapItemID=%s,dropItemNPCID=%s,curItemID=%s,packIndex=%s" |
| | | % (mapItemID, dropItemNPCID, curItemID, packIndex), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | # 副本拾取物品
|
| | | FBLogic.OnFBPickUpItem(curPlayer, singItem, tick)
|
| | |
|
| | | dropItemNPCID = GetMapItemUserDataValue(mapItem, ShareDefine.Def_MapItemInfo_NPCID)
|
| | | equipInfo = [singItem.GetEquipPlace(), ItemCommon.GetItemClassLV(singItem), singItem.GetItemColor(),
|
| | | singItem.GetItemQuality(), singItem.GetUserData()]
|
| | | if not itemControl.PutInItem(packIndex, singItem, event=[ChConfig.ItemGive_Pickup, False, {"NPCID":dropItemNPCID}]):
|
| | | #物品不能放入
|
| | | #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:
|
| | |
| | | # SingleFBTPickUP(curPlayer, mapItemID, tick)
|
| | | # return
|
| | |
|
| | | GameWorld.DebugLog("请求拾取物品, isGuard=%s,mapItemIDList=%s" % (isGuard, mapItemIDList), curPlayer.GetPlayerID())
|
| | | |
| | | succMapItemIDList = [] # 成功拾取的地图物品
|
| | | for mapItemID in mapItemIDList:
|
| | | if __DoPickup(curPlayer, mapItemID, tick, isGuard):
|
| | | succMapItemIDList.append(mapItemID)
|
| | |
|
| | | GameWorld.DebugLog("请求拾取物品, isGuard=%s, MapItemID=%s, SuccMapItemID=%s" |
| | | % (isGuard, mapItemIDList, succMapItemIDList), curPlayer.GetPlayerID())
|
| | | GameWorld.DebugLog(" 成功拾取物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
|
| | |
|
| | | # 守护拾取的,附加同步守护拾取结果
|
| | | if isGuard and succMapItemIDList:
|
| | |
| | | # @param tick 当前时间
|
| | | # @return True or False
|
| | | # @remarks 函数详细说明.
|
| | | def __CheckPickUpItemTime(curPlayer , mapItem , tick):
|
| | | def __CheckPickUpItemTime(curPlayer, mapItem, tick, mapItemID, dropItemNPCID):
|
| | | #判断物品保护时间
|
| | | #玩家击杀掉落的
|
| | | if mapItem.GetRemainTick(tick) == 0:
|
| | | return True
|
| | | itemOwnerType = mapItem.GetOwnerType()
|
| | | itemOwnerType = mapItem.GetOwnerType()
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | ownerID = mapItem.GetOwnerID()
|
| | |
|
| | | #所有人都可以拾取的物品
|
| | | if itemOwnerType == ChConfig.Def_NPCHurtTypeAll:
|
| | | return True
|
| | | #个人物品
|
| | | elif itemOwnerType == ChConfig.Def_NPCHurtTypePlayer:
|
| | | if mapItem.GetOwnerID() != curPlayer.GetPlayerID():
|
| | | #GameWorld.Log("该物品不属于你,不能拾取1")
|
| | | if ownerID != playerID:
|
| | | GameWorld.Log("玩家没有归属权,不能拾取! mapItemID=%s,dropItemNPCID=%s,ownerID=%s" |
| | | % (mapItemID, dropItemNPCID, ownerID), playerID)
|
| | | return False
|
| | | #队伍物品
|
| | | elif itemOwnerType == ChConfig.Def_NPCHurtTypeTeam:
|
| | | curTeam = curPlayer.GetTeam()
|
| | | if curTeam == None:
|
| | | #GameWorld.Log("该物品不属于你,不能拾取2")
|
| | | GameWorld.Log("没有队伍不能拾取归属队伍物品! mapItemID=%s,dropItemNPCID=%s,ownerID=%s" |
| | | % (mapItemID, dropItemNPCID, ownerID), playerID)
|
| | | return False
|
| | | if curTeam.GetTeamID() != mapItem.GetOwnerID():
|
| | | #GameWorld.Log("该物品不属于你,不能拾取3")
|
| | | if curTeam.GetTeamID() != ownerID:
|
| | | GameWorld.Log("队伍没有归属权,不能拾取! mapItemID=%s,dropItemNPCID=%s,ownerID=%s,curTeamID=%s" |
| | | % (mapItemID, dropItemNPCID, ownerID, curTeam.GetTeamID()), playerID)
|
| | | return False
|
| | | #阵营物品
|
| | | elif itemOwnerType == ChConfig.Def_NPCHurtTypeFaction:
|
| | | if mapItem.GetOwnerID() != curPlayer.GetFaction():
|
| | | #GameWorld.Log("该物品不属于你,不能拾取5")
|
| | | if ownerID != curPlayer.GetFaction():
|
| | | GameWorld.Log("阵营没有归属权,不能拾取! mapItemID=%s,dropItemNPCID=%s,ownerID=%s,curFaction=%s" |
| | | % (mapItemID, dropItemNPCID, ownerID, curPlayer.GetFaction()), playerID)
|
| | | return False
|
| | | #特殊玩家ID归属
|
| | | elif itemOwnerType == ChConfig.Def_NPCHurtTypeSpecial:
|
| | | ownerIDList = GetMapItemUserDataValue(mapItem, ShareDefine.Def_MapItemInfo_SpecOwner, [])
|
| | | if curPlayer.GetPlayerID() not in ownerIDList:
|
| | | #GameWorld.Log("该物品不属于你,不能拾取6! ownerIDList=%s" % ownerIDList, curPlayer.GetPlayerID())
|
| | | if playerID not in ownerIDList:
|
| | | GameWorld.Log("玩家没有归属权,不能拾取! mapItemID=%s,dropItemNPCID=%s,ownerIDList=%s" |
| | | % (mapItemID, dropItemNPCID, ownerIDList), playerID)
|
| | | return False
|
| | | #仙盟归属
|
| | | elif itemOwnerType == ChConfig.Def_NPCHurtTypeFamily:
|
| | | if mapItem.GetOwnerID() != curPlayer.GetFamilyID():
|
| | | #GameWorld.Log("该物品不属于你仙盟的,不能拾取7! ownerFamilyID=%s,curFamilyID=%s" |
| | | # % (mapItem.GetOwnerID(), curPlayer.GetFamilyID()), curPlayer.GetPlayerID())
|
| | | if ownerID != curPlayer.GetFamilyID():
|
| | | GameWorld.Log("仙盟没有归属权,不能拾取! mapItemID=%s,dropItemNPCID=%s,ownerID=%s,curFamilyID=%s" |
| | | % (mapItemID, dropItemNPCID, ownerID, curPlayer.GetFamilyID()), playerID)
|
| | | return False
|
| | |
|
| | | return True
|