| | |
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import PlayerSuccess
|
| | | import PyGameData
|
| | | import NPCCommon
|
| | | import FBCommon
|
| | |
| | | # @param tick 当前时间
|
| | | # @return None or True
|
| | | # @remarks 函数详细说明.
|
| | | def __DoPickup(curPlayer, mapItemID, tick, isGuard):
|
| | | def __DoPickup(curPlayer, mapItemID, tick):
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | mapItemManager = GameWorld.GetMapItemManager()
|
| | |
| | | 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"
|
| | |
| | | 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:
|
| | |
| | | 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()
|
| | |
| | | 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)
|
| | |
|
| | | # 不需要队伍提示
|
| | |
| | | # PickupItemSysNotify(curPlayer, isTeamNotify, itemMsgList, isEquip)
|
| | | #=======================================================================
|
| | |
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PickUpItem, curItemCount, [curItemID])
|
| | | |
| | | #物品已经被捡起, 把物品指针置为空
|
| | | mapItem.SetDropItem(None)
|
| | | #通知客户端, 人物捡起该物品, 以及回收物品的逻辑
|
| | |
| | | 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 当前时间
|
| | |
| | | #玩家捡起物品
|
| | | 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 当前玩家索引
|
| | |
| | | if not isOK:
|
| | | return False
|
| | |
|
| | | #------------使用物品成功, 执行相关操作
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseItem, successCnt, [curItemTypeID])
|
| | | |
| | | curPlayer.Sync_UseItem(curItemTypeID, useItemIndex)
|
| | | curPlayer.SetItemCD(curItemCDType, tick)
|
| | |
|
| | |
| | | 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)
|
| | |
|
| | |
| | | #根据物品效果使用{物品效果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_GuajiAward:"Item_GuajiAward", #直接给挂机收益
|
| | | ChConfig.Def_Effect_CleanGuilt:"Item_CleanGuilt", # 洗红名
|
| | |
| | | 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_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", # 增加爵位经验
|