| | |
| | |
|
| | | import FBCommon
|
| | | import GameWorld
|
| | | import IPY_GameWorld
|
| | | import PlayerControl
|
| | | import NPCCustomRefresh
|
| | | import ChPyNetSendPack
|
| | | import ItemControler
|
| | | import EventShell
|
| | | import NetPackCommon
|
| | | import ShareDefine
|
| | | import IpyGameDataPY
|
| | | import PlayerRune
|
| | | import ItemCommon
|
| | | import ChConfig
|
| | | import ChPlayer
|
| | | import PlayerSuccess
|
| | | import PlayerActivity
|
| | | import PlayerBillboard
|
| | |
| | | import PlayerActLogin
|
| | | import EventReport
|
| | | import PlayerBossReborn
|
| | | import GameObj
|
| | |
|
| | | import random
|
| | | import math
|
| | |
| | | GameWorld.DebugLog(' 更新符印塔已通关数 %s' % passlv)
|
| | | return
|
| | |
|
| | | ## 获取BossID
|
| | | def __GetTrialBossID(fbLevel= -1):
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | if fbLevel == -1:
|
| | | fbLevel = gameFB.GetGameFBDictByKey(FBDict_Level)
|
| | | ipyData = GetTowerIpyData(fbLevel)
|
| | | def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
|
| | | ## 回合战斗请求 - 地图验证
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | ipyData = GetTowerIpyData(funcLineID)
|
| | |
|
| | | if not ipyData:
|
| | | GameWorld.ErrLog("__GetTrialBossID() can not find %s in TrialTowerNPC.txt" % fbLevel)
|
| | | return 0
|
| | | return ipyData.GetNPCID()
|
| | | GameWorld.ErrLog("符印塔关卡不存在: funcLineID=%s" % (funcLineID), playerID)
|
| | | return False
|
| | |
|
| | | # 是否已过关
|
| | | if funcLineID <= __GetTrialLevelCurPassLV(curPlayer):
|
| | | GameWorld.DebugLog("符印塔本关已过关, 无法挑战! funcLineID=%s" % funcLineID, playerID)
|
| | | return False
|
| | |
|
| | | ## 杀怪
|
| | | # @param curPlayer
|
| | | # @param curNPC 被杀的怪
|
| | | # @param tick
|
| | | # @return None
|
| | | def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | if gameFB.GetFBStep() != FB_State_Fighting:
|
| | | return
|
| | | bossID = __GetTrialBossID()
|
| | | if bossID != curNPC.GetNPCID():
|
| | | return
|
| | | bossID = ipyData.GetNPCID()
|
| | | if tagID != bossID or tagType != ChConfig.TurnBattle_TagType_NPC:
|
| | | GameWorld.ErrLog("目标bossID错误,无法挑战! mapID=%s,funcLineID=%s,bossID=%s,tagType=%s,tagID=%s" |
| | | % (mapID, funcLineID, bossID, tagType, tagID), curPlayer.GetPlayerID())
|
| | | return False
|
| | |
|
| | | return True
|
| | |
|
| | | fbLevel = gameFB.GetGameFBDictByKey(FBDict_Level)
|
| | | def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
|
| | | ## 回合战斗结束
|
| | | # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
|
| | | needSendGameServer = False
|
| | | awardItemList = []
|
| | | overInfoEx = {}
|
| | |
|
| | | # 过关全服广播
|
| | | fbLevel = funcLineID
|
| | | ipyData = GetTowerIpyData(fbLevel)
|
| | | if not ipyData:
|
| | | return
|
| | | |
| | | FBCommon.OnFBJoin(curPlayer, mapID, funcLineID)
|
| | | isWin = fightRet[0] |
| | | if not isWin:
|
| | | return
|
| | |
|
| | | floorCnt = IpyGameDataPY.GetFuncCfg('TowerRuneType', 2)
|
| | |
| | | # 记录过关
|
| | | EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_TrialTower, 0, ChConfig.CME_Log_End, 0, 1)
|
| | |
|
| | | # 过关全服广播
|
| | | if ipyData.GetIsNotify():
|
| | | IPY_Data = IpyGameDataPY.IPY_Data()
|
| | | maxLevel = IPY_Data.GetRuneTowerByIndex(IPY_Data.GetRuneTowerCount()-1).GetID()
|
| | | sysMark = 'RuneTowerInfo_1' if fbLevel == maxLevel else 'GeRen_liubo_471172'
|
| | | PlayerControl.WorldNotify(0, sysMark,
|
| | | [curPlayer.GetPlayerName(), fbLevel / 100])
|
| | | PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetPlayerName(), fbLevel / 100])
|
| | | |
| | | #更新关卡
|
| | | SetTrialLevelCurPassLV(curPlayer, fbLevel)
|
| | | # 给过关奖励
|
| | | prizeDict = __GiveFBPassPrize(curPlayer, fbLevel)
|
| | | # 过关时间
|
| | | costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
|
| | | prizeDict[FBCommon.Over_costTime] = costTime
|
| | | |
| | | __SendTrialTowerOverInfo(curPlayer, fbLevel, True, prizeDict)
|
| | |
|
| | | #任务
|
| | | EventShell.EventRespons_TrialTowerCnt(curPlayer, fbLevel)
|
| | | #EventShell.EventRespons_TrialTowerCnt(curPlayer, fbLevel)
|
| | |
|
| | | SyncTrialLevelInfo(curPlayer) # 同步最新关卡信息
|
| | | __SetFBToFreeTime(tick)
|
| | | |
| | | #每日任务
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Tower)
|
| | | return
|
| | |
|
| | |
|
| | | FBCommon.OnFBPass(curPlayer, mapID, funcLineID)
|
| | | overInfoEx.update(prizeDict)
|
| | | return needSendGameServer, awardItemList, overInfoEx
|
| | |
|
| | | ## 给过关奖励
|
| | | def __GiveFBPassPrize(curPlayer, fbLevel):
|
| | |
| | | PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
|
| | | PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_TowerSweep, 1)
|
| | | return True
|
| | |
|
| | |
|
| | | def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
|
| | | ## 回合战斗请求 - 地图验证
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | ipyData = GetTowerIpyData(funcLineID)
|
| | | |
| | | if not ipyData:
|
| | | GameWorld.ErrLog("符印塔关卡不存在: funcLineID=%s" % (funcLineID), playerID)
|
| | | return False
|
| | | |
| | | # 是否已过关
|
| | | if funcLineID <= __GetTrialLevelCurPassLV(curPlayer):
|
| | | GameWorld.DebugLog("符印塔本关已过关, 无法挑战! funcLineID=%s" % funcLineID, playerID)
|
| | | return False
|
| | | |
| | | return True
|
| | |
|
| | | def OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet):
|
| | | ## 回合战斗结束
|
| | | # @return: 是否需要同步GameServer, 奖励列表, 发放方式(0-不发放, 1-TurnAttack模块统一发放, 2-功能自己决定发放逻辑)
|
| | | |
| | | needSendGameServer = False
|
| | | awardItemList = []
|
| | | awardWay = 2
|
| | | |
| | | isWin = fightRet[0]
|
| | | if not isWin:
|
| | | return needSendGameServer, awardItemList, awardWay
|
| | | |
| | | return needSendGameServer, awardItemList, awardWay
|
| | |
|
| | | |
| | | return
|
| | |
|