From 023ac4a624af7205b7c295f47f73091c218cbf8d Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期二, 27 十一月 2018 21:53:21 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py | 115 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 87 insertions(+), 28 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py index 5371a4c..7726ee7 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_IceLode.py @@ -29,8 +29,10 @@ import ItemCommon import ItemControler import EventReport +import EventShell import ChPyNetSendPack import NetPackCommon +import BuffSkill import random import datetime @@ -110,19 +112,26 @@ return starCnt, lineList = GetIceLodeAllStarCnt(curPlayer) if not lineList: - __RandomLine(curPlayer) + __RandomLine(curPlayer, lineList) SyncIceLoddInfo(curPlayer) return -def __RandomLine(curPlayer): +def __RandomLine(curPlayer, oldlineList): # 随机今日玩法 maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2) lineList = range(maxCnt) - random.shuffle(lineList) - for i, lineID in enumerate(lineList): - GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, lineID, 0 if i >= randomCnt else 1) + newlineList = list(set(lineList) - set(oldlineList)) + if len(newlineList) < randomCnt: + random.shuffle(oldlineList) + newlineList += oldlineList[:randomCnt-len(newlineList)] + else: + random.shuffle(newlineList) + newlineList = newlineList[:randomCnt] + #random.shuffle(lineList) + for lineID in lineList: + GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, lineID, 1 if lineID in newlineList else 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeDayLV, curPlayer.GetLV()) - GameWorld.DebugLog(' 随机冰晶矿脉今日玩法 lineList =%s'%(lineList[:randomCnt]), curPlayer.GetID()) + GameWorld.DebugLog(' 随机冰晶矿脉今日玩法 oldlineList=%s, newlineList =%s'%(oldlineList, newlineList), curPlayer.GetID()) return ## 是否能够通过活动查询进入 @@ -164,6 +173,7 @@ # @param tick # @return None def DoEnterFB(curPlayer, tick): + PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default * 2) playerID = curPlayer.GetPlayerID() mapID = GameWorld.GetGameWorld().GetMapID() gameFB = GameWorld.GetGameFB() @@ -218,6 +228,7 @@ # @param tick 时间戳 # @return 无意义 def DoExitFB(curPlayer, tick): + PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default) return ##玩家主动离开副本. @@ -225,8 +236,15 @@ # @param tick 时间戳 # @return 返回值无意义 def DoPlayerLeaveFB(curPlayer, tick): + PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default) return +##玩家切换地图 +def DoPlayerChangeMapLogic(curPlayer): + tick = GameWorld.GetGameWorld().GetTick() + for buffID in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial', 2): + BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick) + return def OnPickUpItem(curPlayer, curItem, tick): return @@ -361,7 +379,7 @@ npcCnt += totalMaxCnt NPCCustomRefresh.ProcessAllNPCRefresh(tick) # 立即出发一次标识点刷新 gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, npcCnt) - + GameWorld.DebugLog('设置开始刷怪 remainNPCCnt=%s'%npcCnt) # 副本开始 FBCommon.SetFBStep(FB_Step_Fighting, tick) FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, stepTimeCfg[Def_FightTime] * 1000) @@ -448,12 +466,7 @@ return False return True -## 执行副本杀怪逻辑 -# @param curPlayer 杀怪的人 -# @param curNPC 被杀的怪 -# @param tick 当前时间 -# @return None -def DoFB_Player_KillNPC(curPlayer, curNPC, tick): +def __OnKillNPC(curNPC, tick): gameFB = GameWorld.GetGameFB() npcid = curNPC.GetNPCID() npcCfg = GetIceLodeNPCCfg() @@ -467,9 +480,29 @@ remainNPCCnt = max(0, gameFB.GetGameFBDictByKey(FBPlayerDict_RemainNPCCnt) - 1) gameFB.SetGameFBDict(FBPlayerDict_RemainNPCCnt, remainNPCCnt) - - if remainNPCCnt <=0: + GameWorld.DebugLog('__OnKillNPC remainNPCCnt=%s'%remainNPCCnt) + if remainNPCCnt <=0 or npcid in IpyGameDataPY.GetFuncEvalCfg('IceLodeSpecial'): __DoIceLodeOver(True) + return + +def DoFB_NPCDead(curNPC): + __OnKillNPC(curNPC, GameWorld.GetGameWorld().GetTick()) + return + +#def DoFB_Npc_KillNPC(attacker, curNPC, tick): +# GameWorld.Log('__OnKillNPC 1111111111') +# __OnKillNPC(attacker, curNPC, tick) +# return + +## 执行副本杀怪逻辑 +# @param curPlayer 杀怪的人 +# @param curNPC 被杀的怪 +# @param tick 当前时间 +# @return None +#def DoFB_Player_KillNPC(curPlayer, curNPC, tick): +# GameWorld.Log('__OnKillNPC 2222222222') +# __OnKillNPC(curPlayer, curNPC, tick) +# # addPoint = GetPointByNPCID(npcid) # if not addPoint: @@ -521,16 +554,16 @@ lineID = FBCommon.GetFBPropertyMark() star = GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_FBStar) mapID = ChConfig.Def_FBMapID_IceLode - + isInFBOnDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeIsInFBOnDay) #更新星级 lastStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID]) if isPass and star > lastStar: GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, star, False, [mapID]) FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # 同步信息 - if not lastStar: #每日活动 + if not lastStar and not isInFBOnDay: #每日活动 PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_IceLode) - isInFBOnDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IceLodeIsInFBOnDay) - if isInFBOnDay: #在副本里过天,副本结束后再补发奖励 + + if isInFBOnDay: #在副本里过天,副本结束后再补发星级奖励 CheckIceLodeStarAwardMail(curPlayer) # exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp) # expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint) @@ -540,19 +573,33 @@ if not costTime: costTime = tick - GameWorld.GetGameFB().GetFBStepTick() #jsonItemList = PyGameData.g_fbPickUpItemDict.get(playerID, []) - jsonItemList = FBCommon.GetJsonItemList(FBCommon.GetFBLineReward(mapID, lineID)) + overDict = {FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime} + if isPass: + itemList = FBCommon.GetFBLineReward(mapID, lineID) + # 给物品 + needSpace = len(itemList) + packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) + if needSpace > packSpace: + PlayerControl.SendMailByKey('', [curPlayer.GetID()], itemList) + else: + for itemID, itemCount, isBind in itemList: + ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem]) + + jsonItemList = FBCommon.GetJsonItemList(itemList) + overDict[FBCommon.Over_itemInfo] = jsonItemList + EventShell.EventRespons_FBEvent(curPlayer, 'icelode') # 通知结果 - __SendIceLodeOverInfo(curPlayer, {FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime, FBCommon.Over_itemInfo:jsonItemList}) + __SendIceLodeOverInfo(curPlayer, overDict) # 进入离开阶段 FBCommon.SetFBStep(FB_Step_Over, tick) FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, FBCommon.GetFBLineStepTime(mapID)[Def_LeaveTime] * 1000) # 清怪,关闭刷怪 - FBCommon.ClearFBNPC() - npcCfg = GetIceLodeNPCCfg() - for npcInfo in npcCfg: - NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick) +# FBCommon.ClearFBNPC() +# npcCfg = GetIceLodeNPCCfg() +# for npcInfo in npcCfg: +# NPCCustomRefresh.CloseNPCRefresh(npcInfo[Def_RefreshMark], tick) return @@ -577,6 +624,9 @@ ## 可否扫荡 def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx): + if curPlayer.GetMapID() == ChConfig.Def_FBMapID_IceLode: + GameWorld.DebugLog('冰晶矿脉扫荡 副本里不能扫荡 ') + return #战力判断 LVIpyData = PlayerControl.GetPlayerLVIpyData(curPlayer.GetLV()) reFightPower = 0 if not LVIpyData else LVIpyData.GetIceLodeFightPower() # 当前等级参考战力 @@ -602,6 +652,8 @@ GameWorld.DebugLog("冰晶矿脉扫荡仙玉不足!costGold=%s" % (costMoney)) return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeHasSweep, 1) + + SyncIceLoddInfo(curPlayer) return True ## 扫荡结果 @@ -615,10 +667,15 @@ for itemID, itemCnt, isBind in itemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem]) #直接将5条线星级改为3星 + addCnt = 0 starCnt, lineList = GetIceLodeAllStarCnt(curPlayer) for lineid in lineList: + curStar = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineid, False, [mapID]) + if curStar == 0: + addCnt += 1 GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineid, 3, False, [mapID]) - + PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_IceLode, addCnt) + FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID) # 同步信息 # npcCountDict = {} # iceLodeSweepDict = IpyGameDataPY.GetFuncEvalCfg('IceLodeSweep') # for npcID, count in iceLodeSweepDict.items(): @@ -686,7 +743,7 @@ if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_IceLoadLineID, i): starCnt += GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, i, False, [ChConfig.Def_FBMapID_IceLode]) lineList.append(i) - if len(lineList) != randomCnt: + if lineList and len(lineList) != randomCnt: GameWorld.ErrLog(' 冰晶矿脉获取当前总星数,当前线路数量异常!lineList=%s'%lineList) return starCnt, lineList[:randomCnt] @@ -723,10 +780,12 @@ maxCnt, randomCnt = IpyGameDataPY.GetFuncEvalCfg('IceLodeCfg', 2) for i in xrange(maxCnt): GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, i, 0, False, [ChConfig.Def_FBMapID_IceLode]) + FBCommon.Sync_FBPlayerFBInfoData(curPlayer, ChConfig.Def_FBMapID_IceLode) # 同步信息 #重置领奖记录 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeStarAwardRecord, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IceLodeHasSweep, 0) #随机今日玩法 - __RandomLine(curPlayer) + __RandomLine(curPlayer, lineList) #通知 SyncIceLoddInfo(curPlayer) return True -- Gitblit v1.8.0