#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GameWorldLogic.FBProcess.GameLogic_AlineInvade # # @todo:ÒìÊÞÈëÇÖ # @author hxp # @date 2024-05-16 # @version 1.0 # # ÏêϸÃèÊö: ÒìÊÞÈëÇÖ # #------------------------------------------------------------------------------- #"""Version = 2024-05-16 16:00""" #------------------------------------------------------------------------------- import ChConfig import NPCCommon import TurnAttack import IpyGameDataPY import PlayerBillboard import ItemControler import PlayerControl import GameWorld import FBCommon def OnFBPlayerOnDay(curPlayer): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlineInvadeHurtTotalEx, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlineInvadeHurtTotal, 0) return def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList): ## »ØºÏÕ½¶·ÇëÇó - µØÍ¼ÑéÖ¤ weekNPCIDList = IpyGameDataPY.GetFuncEvalCfg("AlineInvade", 1) curTime = GameWorld.GetCurrentTime() curWeekday = curTime.weekday() bossID = weekNPCIDList[curWeekday % len(weekNPCIDList)] if tagType != ChConfig.TurnBattle_TagType_NPC or tagID != bossID: GameWorld.ErrLog("ÒìÊÞÈëÇÖÄ¿±êbossID´íÎó£¬ÎÞ·¨ÌôÕ½! curWeekday=%s,bossID=%s,tagType=%s,tagID=%s" % (curWeekday, bossID, tagType, tagID), curPlayer.GetPlayerID()) return False return True def OnTurnFightPlayerFactionHurt(curPlayer, mapID, funcLineID, hurtObj, hurtValue, factionHurtValue): ## »ØºÏÕ½¶·Íæ¼ÒÕóÓªÉ˺¦±ä¸ü tfBattle = TurnAttack.GetTurnFightBattle() fbData = tfBattle.fbData boxNum = fbData.get("boxNum", 0) # µ±Ç°ºÐ×ÓÊý fbData["boxHurt"] = boxHurt = fbData.get("boxHurt", 0) + hurtValue # µ±Ç°ºÐ×ÓÒÑÀÛ¼ÆÉ˺¦ ipyData = IpyGameDataPY.GetIpyGameData("AlineInvade", boxNum) if not ipyData: return needHurtValue = ipyData.GetNeedHurtValue() isBoxNumChange = False if boxHurt >= needHurtValue: isBoxNumChange = True boxHurt = factionHurtValue ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetAlineInvadeCount()): ipyData = ipyDataMgr.GetAlineInvadeByIndex(index) boxNum = ipyData.GetBoxNum() needHurtValue = ipyData.GetNeedHurtValue() if boxHurt >= needHurtValue: boxHurt -= needHurtValue else: break fbData["boxNum"] = boxNum fbData["boxHurt"] = boxHurt fbData["totalHurt"] = factionHurtValue helpDict = {FBCommon.Over_dataMapID:tfBattle.mapID, FBCommon.Over_lineID:tfBattle.funcLineID} helpDict.update(fbData) FBCommon.Notify_FBHelp(curPlayer, helpDict) if not isBoxNumChange: return tagNPC = tfBattle.GetTagMainObj() if tagNPC: GameWorld.DebugLog("boxNum±ä¸ü: %s" % (boxNum)) NPCCommon.NPCControl(tagNPC).RefreshNPCAttrState() return def CalcFBNPCPlusAttr(curNPC): ## ¸±±¾NPCÔö¼ÓÊôÐÔ # @return: Ôö¼ÓµÄÊôÐÔÐÅÏ¢ {attrID:value, ...} plusAttrDict = {} tfBattle = TurnAttack.GetTurnFightBattle() boxNum = tfBattle.fbData.get("boxNum", 0) ipyData = IpyGameDataPY.GetIpyGameData("AlineInvade", boxNum) if ipyData: plusAttrDict = ipyData.GetBossAttrPlusInfo() return plusAttrDict def OnTurnFightIsWin(curPlayer, mapID, funcLineID, tagType, tagID, valueList, isWin): ## »ØºÏÕ½¶·¸±±¾ÊÇ·ñ»ñʤ if isWin == False: return isWin # Ö»Òª²»±»»÷°Ü¾ÍËãÓ® return True def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet): ## »ØºÏÕ½¶·½áÊø # @return: ÊÇ·ñÐèҪͬ²½GameServer, ½±ÀøÁбí, ͬ²½½á¹ûÐÅÏ¢ needSendGameServer = False isWin = fightRet[0] # ÎÞÂÛʤÀûÓë·ñ¶¼Ëã²ÎÓ룬¿Û´ÎÊý FBCommon.OnFBJoin(curPlayer, mapID, funcLineID) FBCommon.AddEnterFBCount(curPlayer, ChConfig.Def_TFMapID_AlineInvade) tfBattle = TurnAttack.GetTurnFightBattle() fbData = tfBattle.fbData playerID = curPlayer.GetPlayerID() GameWorld.DebugLog("ÒìÊÞÈëÇÖ½áËã: isWin=%s,fbData=%s" % (isWin, fbData), playerID) boxNum = fbData.get("boxNum", 0) # µ±Ç°ºÐ×ÓÊý totalHurt = fbData.get("totalHurt", 0) # ×ÜÉ˺¦ awardItemDict = {} ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetAlineInvadeCount()): ipyData = ipyDataMgr.GetAlineInvadeByIndex(index) if boxNum < ipyData.GetBoxNum(): break awardWeightList = ipyData.GetBoxAwardWeightList() if not awardWeightList: continue awardItem = GameWorld.GetResultByWeightList(awardWeightList) if not awardItem: continue itemID = awardItem[0] itemCount = awardItem[1] awardItemDict[itemID] = awardItemDict.get(itemID, 0) + itemCount isAuctionItem = 0 awardItemList = [] for itemID, itemCount in awardItemDict.items(): awardItemList.append([itemID, itemCount, isAuctionItem]) ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["AlineInvade", False, {"boxNum":boxNum, "totalHurt":totalHurt}]) # ͬ²½±¾ÈÕÀÛ¼ÆÉ˺¦°ñµ¥ totalHurtTodayEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlineInvadeHurtTotalEx) totalHurtToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlineInvadeHurtTotal) totalHurtToday += totalHurtTodayEx * ChConfig.Def_PerPointValue updTotalHurtToday = totalHurtToday + totalHurt updTotalHurtTodayEx = updTotalHurtToday / ChConfig.Def_PerPointValue updTotalHurtToday = updTotalHurtToday % ChConfig.Def_PerPointValue PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlineInvadeHurtTotalEx, updTotalHurtTodayEx) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AlineInvadeHurtTotal, updTotalHurtToday) GameWorld.DebugLog("¸üнñÈÕÀÛÉË: totalHurtToday=%s,addHurt=%s,updTotalHurtTodayEx=%s,updTotalHurtToday=%s" % (totalHurtToday, totalHurt, updTotalHurtTodayEx, updTotalHurtToday), playerID) PlayerBillboard.UpdateAlineInvadeBillboard(curPlayer) overInfoEx = fbData return needSendGameServer, awardItemList, overInfoEx