#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_XMZZ # # @todo:ÏÉħ֮Õù # @author xdh # @date 2018-01-31 # @version 1.0 # # ÏêϸÃèÊö: ÏÉħ֮Õù # #------------------------------------------------------------------------------- #"""Version = 2018-01-31 15:00""" #------------------------------------------------------------------------------- import FBCommon import PlayerControl import IPY_GameWorld import GameWorld import ChConfig import IpyGameDataPY import ShareDefine import ItemControler import DataRecordPack import ItemCommon import FormulaControl import NPCCustomRefresh import PlayerWeekParty import PlayerSuccess import PyGameData import EventReport import SkillCommon import GameObj import time import math ( Def_TotalTime, #µ¥³¡×Üʱ¼ä Def_PrepareTime, #×¼±¸Ê±¼ä Def_LeaveTime, #Í˳öʱ¼ä ) = range(3) ( Bet_StartTime, #Ͷע¿ªÊ¼Ê±¼ä Bet_EndTime, #Ͷע½áÊøÊ±¼ä Bet_ResultTime, #Ͷע½áËãʱ¼ä Bet_NeedMoney, #ͶעÐèҪǮ ) = range(4) #µ±Ç°¸±±¾µØÍ¼µÄ״̬ ( FB_Step_Open, # ¸±±¾¿ªÆô FB_Step_Prepare, # ¸±±¾µÈ´ý FB_Step_Fighting, # ¸±±¾½øÐÐÖÐ FB_Step_Over, # ¸±±¾½áÊø FB_Step_Close, # ¸±±¾¹Ø±Õ ) = range(5) XMZZ_WinCnt = 'XMZZ_WinCnt' # ʤ³¡Êý XMZZ_TotalExp = 'XMZZ_TotalExp' # »ñµÃµÄ×ܾ­Ñé XMZZ_TotalExpPoint = 'XMZZ_TotalExpPoint' # »ñµÃµÄ×ܾ­Ñéµã XMZZ_ExtraExp = 'XMZZ_ExtraExp' # »ñµÃµÄ¶îÍâ×ܾ­Ñé XMZZ_ExtraExpPoint = 'XMZZ_ExtraExpPoint' # »ñµÃµÄ¶îÍâ×ܾ­Ñéµã XMZZ_TotalScore = 'XMZZ_TotalScore' # »ñµÃµÄ×Ü»ý·Ö XMZZ_ExtraScore = 'XMZZ_ExtraScore' # »ñµÃµÄ¶îÍâ»ý·Ö XMZZ_NeedKillNPCID = 'XMZZ_NeedKillNPCID' # ÐèÒª»÷ɱµÄNPCID def __GetFightTime():return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_XMZZ) def OnXMZZLogin(curPlayer): #Íæ¼ÒµÇ¼Èç¹û»¹ÔÚPKÖÐÔò֪ͨÐÅÏ¢ ¼ÌÐøPK # if not FBCommon.GetFBFuncOpenState(ChConfig.Def_FBMapID_XMZZ): # return # curtime = int(time.time()) # lastStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XMZZLastStartTime) # fightTime = __GetFightTime() # if lastStartTime and curtime - lastStartTime < fightTime: # #»¹ÔÚPKÖÐ # msgInfo = str([0]) # GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'XMZZStartFight', msgInfo, len(msgInfo)) # # remainTime = fightTime - (curtime - lastStartTime) # curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, remainTime * 1000, True) return ## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineID Ïß·id # @param tick ʱ¼ä´Á # @return ²¼¶ûÖµ def OnEnterFBEvent(curPlayer, mapID, lineID, tick): return True ##¸±±¾Íæ¼Ò½øÈëµã # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param lineId ·ÖÏßID # @param ipyEnterPosInfo ¹¦ÄÜÏß·IPYÅäÖÃ×ø±êÐÅÏ¢ # @param tick ʱ¼ä´Á # @return posX, posY, Ëæ»ú°ë¾¶(¿ÉÑ¡) def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick): return ipyEnterPosInfo ##ÊÇ·ñ¿ÉÒÔ½øÈë # @param ask ÇëÇó½á¹¹Ìå # @param tick ʱ¼ä´Á # @return TChangeMapError # @remarks def OnChangeMapAsk(ask, tick): return IPY_GameWorld.cmeAccept def __ResetPos(curPlayer): startPosX, startPosY = FBCommon.GetFBLineEnterPosInfo(ChConfig.Def_FBMapID_XMZZ, 0)[:2] GameWorld.ResetPlayerPos(curPlayer, startPosX, startPosY, isResetPet=True) return ##Íæ¼Ò½øÈ븱±¾ # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks Íæ¼Ò½øÈ븱±¾ def DoEnterFB(curPlayer, tick): #gameFB = GameWorld.GetGameFB() curtime = int(time.time()) hadDelTicket = FBCommon.GetHadDelTicket(curPlayer) if not hadDelTicket: FBCommon.SetHadDelTicket(curPlayer) FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_XMZZ, 1) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XMZZLastStartTime, curtime) #FBCommon.SetFBStep(FB_Step_Prepare, tick) #PrepareXMZZPK(curPlayer, tick) PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_XMZZ, 1) msgInfo = str([1]) # ÊÇ·ñ¸Õ¿ªÊ¼ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'XMZZStartFight', msgInfo, len(msgInfo)) curPlayer.SetHP(curPlayer.GetMaxHP()) skillManager = curPlayer.GetSkillManager() for i in range(0, skillManager.GetSkillCount()): curSkill = skillManager.GetSkillByIndex(i) if curSkill.GetRemainTime() != 0: curSkill.SetRemainTime(0) curSkill.Sync_Skill() for buffType in range(IPY_GameWorld.bfProcessDeBuff, IPY_GameWorld.bfDeBuff): buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType) if buffTuple: buffState = buffTuple[0] buffState.Clear() PlayerControl.PlayerControl(curPlayer).RefreshAllState() EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_XMZZ, 0, ChConfig.CME_Log_Start) lastStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XMZZLastStartTime) fightTime = __GetFightTime()[Def_TotalTime] remainTime = fightTime - (curtime - lastStartTime) if remainTime <= 0: PlayerControl.PlayerLeaveFB(curPlayer) return curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, remainTime * 1000, True) DoFBHelp(curPlayer, tick) # fbStep = gameFB.GetFBStep() return ##---¸±±¾×ÜÂß¼­¼ÆÊ±Æ÷--- # @param tick:ʱ¼ä´Á # @return ÎÞÒâÒå # @remarks ¸±±¾×ÜÂß¼­¼ÆÊ±Æ÷ def OnProcess(tick): fbStep = GameWorld.GetGameFB().GetFBStep() # # ¸±±¾×¼±¸ if fbStep == FB_Step_Prepare: ResetPos(tick) # PrepareXMZZPK(tick) # # ¸±±¾½øÐÐÖÐ if fbStep == FB_Step_Fighting: StartXMZZPK(tick) # # ¸±±¾½áÊø # elif fbStep == FB_Step_Over: # __DoLogic_FB_Over(tick) return def ResetPos(tick): if tick - GameWorld.GetGameFB().GetFBStepTick() < 1 * 1000: return FBCommon.SetFBStep(FB_Step_Fighting, tick) curPlayer = FBCommon.GetCurSingleFBPlayer() if curPlayer: __ResetPos(curPlayer) return def __ChcekFBOver(tick): curPlayer = FBCommon.GetCurSingleFBPlayer() if not curPlayer: return curtime = int(time.time()) lastStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XMZZLastStartTime) fightTime = __GetFightTime()[Def_TotalTime] remainTime = fightTime - (curtime - lastStartTime) if remainTime > 0: return FBCommon.SetFBStep(FB_Step_Over, tick) npcList = FBCommon.GetMapNPCList() if not npcList: return curNPC = npcList[0] npcHPPer = __GetHPPer(curNPC) HPPer = __GetHPPer(curPlayer) if not npcHPPer or not HPPer: return GameWorld.DebugLog(' ÏÉħ֮Õùʱ¼äµ½£¬·¢ËͽáËã', curPlayer.GetID()) isWin = HPPer > npcHPPer __SendPKResult(curPlayer, isWin, 1, HPPer) return def __GetHPPer(gameObj): maxHP = GameObj.GetMaxHP(gameObj) return GameObj.GetHP(gameObj)*100/maxHP if maxHP else 0 def __SendPKResult(curPlayer, isWin, isEnd, HPPer): vsName = '' lineID = GameWorld.GetGameWorld().GetLineID() if lineID in PyGameData.g_xmzzVSPlayerData: vsPlayerPropData = PyGameData.g_xmzzVSPlayerData.pop(lineID) vsName = vsPlayerPropData.get("Name", "") if not vsName: npcID = GameWorld.GetGameFB().GetGameFBDictByKey(XMZZ_NeedKillNPCID) npcData = GameWorld.GetGameData().FindNPCDataByID(npcID) if npcData: vsName = npcData.GetName() vsName = vsName.decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding()) msgInfo = str([vsName, isWin, isEnd, HPPer]) #Ãû×Ö,ÊÇ·ñʤÀû,ÊÇ·ñ½áÊø,Ê£ÓàѪÁ¿°Ù·Ö±È GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'XMZZPKOver', msgInfo, len(msgInfo)) GameWorld.DebugLog("__SendPKResult vsName=%s, isWin=%s, isEnd=%s, HPPer=%s" % (vsName, isWin, isEnd, HPPer), curPlayer.GetID()) return def PrepareXMZZPK(curPlayer, tick, vsPlayerInfo=[]): #=============================================================================================== # fbStep = GameWorld.GetGameFB().GetFBStep() # if fbStep != FB_Step_Prepare: # return #=============================================================================================== FBCommon.SetFBStep(FB_Step_Prepare, tick) #ÖØÖÃ×ø±ê #__ResetPos(curPlayer) FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttWaitStart, __GetFightTime()[Def_PrepareTime] * 1000) #FBCommon.SetFBStep(FB_Step_Fighting, tick) if not vsPlayerInfo: return pkPlayerID, pkPlayerPropData = vsPlayerInfo lineID = GameWorld.GetGameWorld().GetLineID() PyGameData.g_xmzzVSPlayerData[lineID] = pkPlayerPropData robotIDList = IpyGameDataPY.GetFuncEvalCfg("XMZZRobot", 1) if pkPlayerID >= len(robotIDList): npcID = IpyGameDataPY.GetFuncCfg("XMZZRobot", 2) else: npcID = robotIDList[pkPlayerID] GameWorld.DebugLog("¶ÔÊÖÐÅÏ¢: pkPlayerID=%s,npcID=%s,%s" % (pkPlayerID, npcID, pkPlayerPropData), curPlayer.GetID()) #Ë¢¹Ö NPCCustomRefresh.SetNPCRefresh(101, [npcID]) GameWorld.GetGameFB().SetGameFBDict(XMZZ_NeedKillNPCID, npcID) return def GetFBNPCStrengthenAttr(curNPC, isReborn): ## »ñÈ¡¸±±¾NPCÖ¸¶¨³É³¤ÊôÐÔ×Öµä npcID = curNPC.GetNPCID() lineID = GameWorld.GetGameWorld().GetLineID() if lineID not in PyGameData.g_xmzzVSPlayerData: return {} vsPlayerPropData = PyGameData.g_xmzzVSPlayerData[lineID] if not vsPlayerPropData: return {} robotIDList = IpyGameDataPY.GetFuncEvalCfg("XMZZRobot", 1) playerNPCID = IpyGameDataPY.GetFuncCfg("XMZZRobot", 2) if npcID not in robotIDList and npcID != playerNPCID: return {} job = vsPlayerPropData["Job"] npcLV = vsPlayerPropData["LV"] npcAttrDict = {} # È¡¶ÔÊÖÍæ¼ÒÊôÐÔÐÅÏ¢¸³ÓèNPC if npcID == playerNPCID: npcAttrDict = vsPlayerPropData if isReborn: __DoGiveVSPlayerNPCSkill(curNPC, job, npcLV) return npcAttrDict def __DoGiveVSPlayerNPCSkill(curNPC, job, npcLV): skillManager = curNPC.GetSkillManager() jobSkillDict = IpyGameDataPY.GetFuncEvalCfg("XMZZRobotSkill", 1) if job not in jobSkillDict: return skillInfoDict = jobSkillDict[job] #{1:{(100, 101, 102, 103):1, 50000:100, 50100:200, 50400:300}, 2:{(200, 201, 202, 203):1, 55000:100, 55100:200, 55200:300}} skillIDList = [] for skillInfo, needLV in skillInfoDict.items(): if npcLV < needLV: continue if isinstance(skillInfo, int): skillIDList.append(skillInfo) else: skillIDList += list(skillInfo) GameWorld.DebugLog("¸øNPC¼¼ÄÜ: job=%s,npcLV=%s, %s" % (job, npcLV, skillIDList)) for skillID in skillIDList: skillManager.LearnSkillByID(skillID) return def StartXMZZPK(tick): __ChcekFBOver(tick) # ¼ä¸ôδµ½ if tick - GameWorld.GetGameFB().GetFBStepTick() < __GetFightTime()[Def_PrepareTime] * 1000: return return ## Ö´Ðи±±¾É±¹ÖÂß¼­ # @param curPlayer ɱ¹ÖµÄÈË # @param curNPC ±»É±µÄ¹Ö # @param tick µ±Ç°Ê±¼ä # @return None def DoFB_Player_KillNPC(curPlayer, curNPC, tick): if GameWorld.GetGameFB().GetFBStep() != FB_Step_Fighting: return if curNPC.GetNPCID() != GameWorld.GetGameFB().GetGameFBDictByKey(XMZZ_NeedKillNPCID): return #¾àÀë½áÊøÊ±¼ä´óÓÚ10Ãë curtime = int(time.time()) lastStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XMZZLastStartTime) fightTime = __GetFightTime()[Def_TotalTime] remainTime = fightTime - (curtime - lastStartTime) if remainTime < 10: #½áÊø isEnd = True else: #FBCommon.SetFBStep(FB_Step_Prepare, tick) #PrepareXMZZPK(curPlayer, tick) isEnd = False HPPer = __GetHPPer(curPlayer) __SendPKResult(curPlayer, 1, isEnd, HPPer) return ##Íæ¼ÒËÀÍö. # @param curPlayer:ËÀÍöµÄÍæ¼Ò # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks Íæ¼ÒÖ÷¶¯À뿪¸±±¾. def DoPlayerDead(curPlayer): # if GameWorld.GetGameFB().GetFBStep() != FB_Step_Fighting: # return HPPer = __GetHPPer(curPlayer) __SendPKResult(curPlayer, 0, 1, HPPer) return # ## ¼ì²éÊÇ·ñ¿É¹¥»÷£¬ Ö÷Åж¨²»¿É¹¥»÷µÄÇé¿ö£¬ÆäËûÂß¼­ÓÉÍâ²ã¾ö¶¨ # @param attacker ¹¥»÷·½ # @param defender ·ÀÊØ·½ # @return bool def CheckCanAttackTagObjInFB(attacker, defender): gameFB = GameWorld.GetGameFB() if gameFB.GetFBStep() != FB_Step_Fighting: return False return True #def XMZZStartFight(curPlayer): # #ÏÉħ֮Õù¿ªÊ¼Æ¥Åä # #ÊÇ·ñÕýÔÚPKÖÐ # curtime = int(time.time()) # lastStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XMZZLastStartTime) # fightTime = __GetFightTime() # if lastStartTime and curtime - lastStartTime < fightTime: # GameWorld.DebugLog(' ÏÉħ֮Õù¿ªÊ¼Æ¥Åä »¹ÔÚPKÖÐ!', curPlayer.GetID()) # return # # msgInfo = str([1]) # ÊÇ·ñ¸Õ¿ªÊ¼ # #Ôö¼Ó´ÎÊý # GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'XMZZStartFight', msgInfo, len(msgInfo)) # return # #def XMZZStartFightResult(curPlayer, result): # if not result: # return # FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_FBMapID_XMZZ, 1) # curtime = int(time.time()) # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XMZZLastStartTime, curtime) # fightTime = __GetFightTime() # curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, fightTime * 1000, True) # return def GetXMZZWinPrize(curPlayer, prizeEx): ''' @todo: ÁìÈ¡ÏÉħ֮ÕùʤÀû³¡Êý½±Àø @param prizeEx:³¡Êý ''' if not prizeEx: GameWorld.DebugLog("ÁìÈ¡ÏÉħ֮ÕùʤÀû³¡Êý½±Àø: prizeEx=%s" % (prizeEx), curPlayer.GetPlayerID()) return winCntAwardDict = IpyGameDataPY.GetFuncEvalCfg('XMZZAward', 1, {}) if str(prizeEx) not in winCntAwardDict: GameWorld.DebugLog("²»ÄÜÁìÏÉħ֮ÕùʤÀû³¡Êý½±Àø! prizeEx=%s" % (prizeEx), curPlayer.GetPlayerID()) return prizeItemList = winCntAwardDict[str(prizeEx)] needSpace = len(prizeItemList) emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if needSpace > emptySpace: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") return msg = str([prizeEx]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "GetXMZZWinPrize", msg, len(msg)) return def OnGetXMZZPrizeResult(curPlayer, funResult): ## ÏÉħ֮ÕùʤÀû³¡Êý½±Àø¸ø½±Àø resultList = eval(funResult) if len(resultList) != 1: return prizeEx = resultList[0] winCntAwardDict = IpyGameDataPY.GetFuncEvalCfg('XMZZAward', 1, {}) if str(prizeEx) not in winCntAwardDict: GameWorld.DebugLog("²»ÄÜÁìÏÉħ֮ÕùʤÀû³¡Êý½±Àø! prizeEx=%s" % (prizeEx), curPlayer.GetPlayerID()) return prizeItemList = winCntAwardDict[str(prizeEx)] # ¸øÎïÆ· [½±ÀøÎïÆ·id,¸öÊý,ÊÇ·ñ°ó¶¨] for itemID, itemCnt, isBind in prizeItemList: if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem]): playerID = curPlayer.GetPlayerID() GameWorld.ErrLog("OnGetXMZZPrizeResult(), give item itemid:%s,count:%s" % (itemID, itemCnt), playerID) return False # ¼Ç¼Áìȡʼþ addDataDict = {"prizeEx":prizeEx, "prizeItemList":prizeItemList} DataRecordPack.DR_FuncGiveItem(curPlayer, "XMZZWin", addDataDict) return def DoXMZZPKInfoLogic(curPlayer, resultList, tick): '''ÏÉħ֮ÕùPKÐÅÏ¢Âß¼­´¦Àí @param resultList: ''' if not resultList or len(resultList) != 2: return overInfo, vsPlayerInfo = resultList # PK½á¹û´¦Àí if overInfo: DoXMZZPKOverLogic(curPlayer, overInfo) # ¶ÔÊÖÐÅÏ¢´¦Àí if vsPlayerInfo: PrepareXMZZPK(curPlayer, tick, vsPlayerInfo) return def DoXMZZPKOverLogic(curPlayer, resultList): #PK½áÊø if len(resultList) != 5: return isWin, isEnd, addScore, addPer, conWinCnt = resultList reExp = PlayerControl.GetPlayerReExp(curPlayer) if isWin: winAddExpFormula = IpyGameDataPY.GetFuncCfg('XMZZPKAward', 4) addExp = eval(FormulaControl.GetCompileFormula("winXMZZAddExp", winAddExpFormula)) else: failAddExpFormula = IpyGameDataPY.GetFuncCfg('XMZZPKAward', 5) addExp = eval(FormulaControl.GetCompileFormula("failXMZZAddExp", failAddExpFormula)) PlayerControl.PlayerControl(curPlayer).AddExp(addExp) playerID = curPlayer.GetID() gameFB = GameWorld.GetGameFB() exp = gameFB.GetPlayerGameFBDictByKey(playerID, XMZZ_TotalExp) expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, XMZZ_TotalExpPoint) totalExp = expPoint * ChConfig.Def_PerPointValue + exp updTotalExp = totalExp + addExp updExp = updTotalExp % ChConfig.Def_PerPointValue updExpPoint = updTotalExp / ChConfig.Def_PerPointValue gameFB.SetPlayerGameFBDict(playerID, XMZZ_TotalExp, updExp) gameFB.SetPlayerGameFBDict(playerID, XMZZ_TotalExpPoint, updExpPoint) addExtraExp = int(addExp / float(addPer + 100) * addPer) extraExp = gameFB.GetPlayerGameFBDictByKey(playerID, XMZZ_ExtraExp) extraExpPoint = gameFB.GetPlayerGameFBDictByKey(playerID, XMZZ_ExtraExpPoint) extraTotalExp = extraExpPoint * ChConfig.Def_PerPointValue + extraExp updExtraTotalExp = extraTotalExp + addExtraExp updExtraExp = updExtraTotalExp % ChConfig.Def_PerPointValue updExtraExpPoint = updExtraTotalExp / ChConfig.Def_PerPointValue gameFB.SetPlayerGameFBDict(playerID, XMZZ_ExtraExp, updExtraExp) gameFB.SetPlayerGameFBDict(playerID, XMZZ_ExtraExpPoint, updExtraExpPoint) tatalScore = gameFB.GetPlayerGameFBDictByKey(playerID, XMZZ_TotalScore) updScore = tatalScore + addScore gameFB.SetPlayerGameFBDict(playerID, XMZZ_TotalScore, updScore) addExtraScore = int(addScore / float(addPer + 100) * addPer) extraScore = gameFB.GetPlayerGameFBDictByKey(playerID, XMZZ_ExtraScore) updExtraScore = extraScore + addExtraScore gameFB.SetPlayerGameFBDict(playerID, XMZZ_ExtraScore, updExtraScore) PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_XMZZGetScore, addScore) if isWin: PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_XMZZWinCnt, 1) gameFB.SetGameFBDict(XMZZ_WinCnt, gameFB.GetGameFBDictByKey(XMZZ_WinCnt)+1) DoFBHelp(curPlayer, 0) if isEnd or not isWin: lastStartTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_XMZZLastStartTime) curTime = int(time.time()) costTime = (curTime-lastStartTime)*1000 overDict = {FBCommon.Over_score:addScore, FBCommon.Over_extrScore:updExtraScore, FBCommon.Over_extraExp:updExtraExp, FBCommon.Over_extraExpPoint:updExtraExpPoint, FBCommon.Over_exp:exp, FBCommon.Over_expPoint:expPoint, FBCommon.Over_costTime:costTime, 'conWinCnt':conWinCnt} FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_XMZZ, 0, isWin, overDict) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_XMZZLastStartTime, 0) curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, __GetFightTime()[Def_LeaveTime] * 1000, True) FBCommon.SetFBStep(FB_Step_Over, GameWorld.GetGameWorld().GetTick()) return ## »ñµÃ¸±±¾°ïÖúÐÅÏ¢ # @param curPlayer µ±Ç°Íæ¼Ò£¨±»Í¨Öª¶ÔÏó£© # @param tick µ±Ç°Ê±¼ä # @return None def DoFBHelp(curPlayer, tick): winCnt = GameWorld.GetGameFB().GetGameFBDictByKey(XMZZ_WinCnt) FBCommon.Notify_FBHelp(curPlayer, {'winCnt':winCnt}) return # {"0":["17:00", "19:57", "20:30", 2000000],} #// AB 03 ÏÉħ֮ÕùѺע #tagCMXMZZBet # #struct tagCMXMZZBet #{ # tagHead Head; # BYTE BetIndex; // ѺעË÷Òý # BYTE BetResult; // ½á¹û 1-ÏÉ×åÓ® 2-ħ×åÓ® #}; def OnXMZZBet(index, clientData, tick): ## ÏÉħ֮ÕùͶע curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) betIndex = clientData.BetIndex betResult = clientData.BetResult betTimeDict = IpyGameDataPY.GetFuncEvalCfg('XMZZBetCfg') if str(betIndex) not in betTimeDict: GameWorld.DebugLog(' ÏÉħ֮ÕùͶע XMZZBetTime ÅäÖÃÀïûÓÐË÷Òý %s' % betIndex) return #Åжϻ״̬ key = ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_XMZZ if GameWorld.GetGameWorld().GetGameWorldDictByKey(key) in [0]: GameWorld.DebugLog(' ÏÉħ֮ÕùͶע ²»ÔÚͶעʱ¼äÄÚ Ë÷Òý %s' % betIndex) return betInfo = betTimeDict[str(betIndex)] # ÅжÏʱ¼ä curTime = str(GameWorld.GetCurrentDataTimeStr())[11:16] startTime, endTime = betInfo[Bet_StartTime], betInfo[Bet_EndTime] if not (startTime <= curTime <= endTime): GameWorld.DebugLog(' ÏÉħ֮ÕùͶע ²»ÔÚͶעʱ¼äÄÚ Ë÷Òý %s' % betIndex) return #ÅжÏÇ® needMoneyDict = betInfo[Bet_NeedMoney] keyList = needMoneyDict.keys() keyList.sort() worldLv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) findLv = keyList[-1] for lv in keyList: if worldLv < int(lv): findLv = lv break needMoney = needMoneyDict[findLv] if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, needMoney): GameWorld.DebugLog(' ÏÉħ֮ÕùͶע Ç®²»¹» Ë÷Òý %s' % betIndex) return #·¢ÖÁGameServer msgInfo = str([betIndex, betResult, needMoney]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'XMZZBet', msgInfo, len(msgInfo)) return def DoXMZZBetCost(curPlayer, needMoney): #ÏÉħ֮ÕùѺע¿ÛÇ® PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, needMoney) return