| | |
| | | maxCnt = FBCommon.GetEnterFBMaxCnt(curPlayer, mapID)
|
| | | if enterCnt + 2 > maxCnt:
|
| | | return False
|
| | | if lineID in newbielineList:
|
| | | hasEnter = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False,
|
| | | [ChConfig.Def_FBMapID_SealDemon])
|
| | | if hasEnter:
|
| | | GameWorld.DebugLog(" 已进入过该新手线路 %s" % lineID)
|
| | | return False
|
| | | return True
|
| | |
|
| | |
|
| | |
| | | def GiveSealDemonAward(curPlayer, lineID, rank, isMail=False, isClientSend=False, dropItemMapInfo=[]):
|
| | | newbielineList = IpyGameDataPY.GetFuncEvalCfg('SealDemonNewbieLine')
|
| | | isNewbieLine = lineID in newbielineList
|
| | | sealDemonIpyData = GetSealDemonIpyData(lineID)
|
| | | if not sealDemonIpyData:
|
| | | return {}
|
| | | prizeMultiple = 1
|
| | | addCnt = 1
|
| | | if isNewbieLine:
|
| | |
| | | elif isClientSend:
|
| | | return {}
|
| | | else:
|
| | | prizeMultiple = 2 if rank == 1 else 1 # 第一名执行双倍掉落奖励,其他一次
|
| | | #prizeMultiple = 2 if rank == 1 else 1 # 第一名执行双倍掉落奖励,其他一次
|
| | | prizeMultiple = 1 # 去除第一名双倍逻辑,改为放在额外奖励产出
|
| | | isDouble = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTDouble)
|
| | | if isDouble:
|
| | | addCnt = 2
|
| | | equipList = []
|
| | | prizeItemDict ={}
|
| | | bossID = CurFBLineBOSSID(lineID)
|
| | | extraItemList = sealDemonIpyData.GetOwnerAwardItemEx() * addCnt if rank == 1 else []
|
| | | #for _ in xrange(addCnt):
|
| | | jsonItemList, totalExp, totalMoney = NPCCommon.GiveKillNPCDropPrize(curPlayer, ChConfig.Def_FBMapID_SealDemon, {bossID:addCnt},
|
| | | mailTypeKey="SealDemonMail", isMail=isMail, prizeMultiple=prizeMultiple, |
| | | dropItemMapInfo=dropItemMapInfo)
|
| | | mailTypeKey="SealDemonMail", isMail=isMail, extraItemList=extraItemList, prizeMultiple=prizeMultiple, |
| | | dropItemMapInfo=dropItemMapInfo,isVirtualDrop=isClientSend)
|
| | | for jsonItem in jsonItemList:
|
| | | if 'UserData' in jsonItem:
|
| | | equipList.append(jsonItem)
|
| | |
| | | % (lineID, bossID, rank, totalExp, totalMoney, jsonItemList), curPlayer.GetPlayerID())
|
| | |
|
| | | prizeItemList = equipList + FBCommon.GetJsonItemList(prizeItemDict.items())
|
| | | #===============================================================================================
|
| | | # if not isMail:
|
| | | # for itemDict in prizeItemList:
|
| | | # itemID = itemDict["ItemID"]
|
| | | # itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
|
| | | # if not itemData:
|
| | | # continue
|
| | | # userData = itemDict.get("UserData", '')
|
| | | # equipInfo = [itemData.GetEquipPlace(), ItemCommon.GetItemClassLV(itemData), itemData.GetItemColor(), |
| | | # itemData.GetItemQuality(), userData]
|
| | | # mapID = ChConfig.Def_FBMapID_SealDemon
|
| | | # NPCCommon.SendGameServerGoodItemRecord(mapID, bossID, curPlayer.GetName(), |
| | | # curPlayer.GetPlayerID(), itemID, equipInfo)
|
| | | #===============================================================================================
|
| | | |
| | |
|
| | | if rank == 1:
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FMTFirst, addCnt)
|
| | |
| | | GameWorld.DebugLog('封魔坛 客户端副本发送结束mapID=%s,lineID=%s,dataList=%s' % (mapID,lineID,dataList), curPlayer.GetPlayerID())
|
| | | rank, hurt = dataList[:2]
|
| | | prizeItemList = GiveSealDemonAward(curPlayer, lineID, rank, False, True, [curPlayer.GetPosX(), curPlayer.GetPosY(), True])
|
| | | if rank == 1:
|
| | | if rank == 1 and prizeItemList:
|
| | | bossID = CurFBLineBOSSID(lineID)
|
| | | NPCCommon.GameServer_KillGameWorldBoss(bossID, curPlayer.GetName(), hurt, False)
|
| | | |
| | | if not prizeItemList:
|
| | | leaveTick = FBCommon.GetFBLineStepTime(mapID, lineID) * 1000
|
| | | GameWorld.Log("没有奖励,直接通知前端结算!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
|
| | | curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
|
| | | overDict = {FBCommon.Over_rank:rank, FBCommon.Over_itemInfo:prizeItemList}
|
| | | FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_SealDemon, lineID, 1, overDict)
|
| | | return
|
| | | |
| | | gameFB = GameWorld.GetGameFB()
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | gameFB.SetGameFBDict(FBDict_IsOver, tick)
|
| | | gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), FBPlayerDict_Rank, rank)
|
| | | curPlayer.Sync_TimeTick(ChConfig.tttPickupItem, 0, ChConfig.Def_FBPickupItemTime, True)
|
| | | return
|
| | |
|
| | | #GameWorld.Log("通知前端结算!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
|
| | | overDict = {FBCommon.Over_rank:rank, FBCommon.Over_itemInfo:prizeItemList}
|
| | | FBCommon.NotifyFBOver(curPlayer, mapID, lineID, 1, overDict)
|
| | | PlayerControl.SetCustomMap(curPlayer, 0, 0)
|
| | | return
|
| | | |
| | |
|
| | | def GetBossRemainHPPer(copyMapID, funcLineID, tick):
|
| | | bossID = CurFBLineBOSSID(funcLineID)
|
| | |
| | | return 0
|
| | | bossID = ipyData.GetNPCID()
|
| | | return bossID
|
| | |
|
| | | def GetSealDemonIpyData(lineID= -1):
|
| | | #该分线刷的BOSSID
|
| | | if lineID == -1:
|
| | | lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
|
| | | if lineID == -1:
|
| | | return
|
| | | return IpyGameDataPY.GetIpyGameDataByCondition('SealDemon', {'LineID':lineID})
|
| | |
|
| | | ##玩家死亡.
|
| | | # @param curPlayer:死亡的玩家
|
| | |
| | | packData.OldDouble = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTOldDouble)
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|