#!/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
|
|
|