|  |  |  | 
|---|
|  |  |  | if tick - curPlayer.GetPlayerActionTick() < curPlayer.GetPrepareTime(): | 
|---|
|  |  |  | #时间间隔没有到 | 
|---|
|  |  |  | if prepareState in [IPY_GameWorld.pstCollecting, IPY_GameWorld.pstMissionCollecting]: | 
|---|
|  |  |  | FBLogic.OnCollecting(curPlayer, tick) | 
|---|
|  |  |  | OnCollecting(curPlayer, tick) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | elif prepareState == IPY_GameWorld.pstMissionCollecting: | 
|---|
|  |  |  | #任务采集 | 
|---|
|  |  |  | PlayerMissionCollect.EndMissionCollect(curPlayer) | 
|---|
|  |  |  | PlayerMissionCollect.EndMissionCollect(curPlayer, tick) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | elif prepareState == ShareDefine.Def_PstProduce: | 
|---|
|  |  |  | #生产采集(进入生产采集状态,不再重置玩家状态) | 
|---|
|  |  |  | 
|---|
|  |  |  | #重置玩家状态 | 
|---|
|  |  |  | curPlayer.SetPrepareState(0)    # 成功 | 
|---|
|  |  |  | PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def OnCollecting(curPlayer, tick): | 
|---|
|  |  |  | ## 采集中逻辑 | 
|---|
|  |  |  | tagObj = curPlayer.GetActionObj() | 
|---|
|  |  |  | if not tagObj: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex()) | 
|---|
|  |  |  | if not curNPC: | 
|---|
|  |  |  | return | 
|---|
|  |  |  | FBLogic.OnCollecting(curPlayer, tick) | 
|---|
|  |  |  | npcID = curNPC.GetNPCID() | 
|---|
|  |  |  | collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID) | 
|---|
|  |  |  | if collectNPCIpyData: | 
|---|
|  |  |  | DoCollectingLostHP(curPlayer, collectNPCIpyData, tick, False) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def DoCollectingLostHP(curPlayer, collectNPCIpyData, tick, isEnd): | 
|---|
|  |  |  | ## 执行采集掉血 | 
|---|
|  |  |  | if not collectNPCIpyData.GetLostHPPer(): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | lostSecond, lostHPPer = collectNPCIpyData.GetLostHPPer() | 
|---|
|  |  |  | lastTick = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CollectLostHPTick) | 
|---|
|  |  |  | lostTime = (tick - lastTick) / (lostSecond * 1000.0) # 掉血次数 | 
|---|
|  |  |  | if isEnd: | 
|---|
|  |  |  | lostTime = int(round(lostTime)) # 采集完的时候四舍五入 | 
|---|
|  |  |  | else: | 
|---|
|  |  |  | lostTime = int(lostTime) | 
|---|
|  |  |  | if lostTime < 1: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | curPlayer.SetDict(ChConfig.Def_PlayerKey_CollectLostHPTick, tick) | 
|---|
|  |  |  | lostValue = int(GameObj.GetMaxHP(curPlayer) * lostHPPer / 100.0) * lostTime | 
|---|
|  |  |  | skillTypeID, buffOwner = 0, None | 
|---|
|  |  |  | SkillCommon.SkillLostHP(curPlayer, skillTypeID, buffOwner, lostValue, tick) | 
|---|
|  |  |  | GameWorld.DebugLog("采集掉血: npcID=%s,lostHPPer=%s,lostTime=%s,lostValue=%s" % (collectNPCIpyData.GetNPCID(), lostHPPer, lostTime, lostValue)) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | def ProcessAreaExp(curPlayer, tick): | 
|---|
|  |  |  | ##给场景经验 | 
|---|
|  |  |  | if GameWorld.IsCrossServer(): | 
|---|
|  |  |  | return | 
|---|
|  |  |  | crossMapID = PlayerControl.GetCrossMapID(curPlayer) | 
|---|
|  |  |  | mapID = crossMapID if crossMapID else GameWorld.GetMap().GetMapID() | 
|---|
|  |  |  | neutralMapExpAwardDict = IpyGameDataPY.GetFuncEvalCfg('NeutralMapExpAward', 1, {}) | 
|---|