#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package GameWorldLogic.FBProcess.GameLogic_ManorWar
|
#
|
# @todo:ÁìµØÕù¶áÕ½
|
# @author hxp
|
# @date 2014-04-26
|
# @version 2.0
|
#
|
# ÏêϸÃèÊö: ÁìµØÕù¶áÕ½
|
# @change: "2014-04-28 18:00" hxp Õ¼ÁìÌáʾÔö¼ÓµØÍ¼²ÎÊý
|
# @change: "2014-06-04 17:30" hxp Ð޸ĶáÆìÌáʾÐÅÏ¢²ÎÊý£¬¸ÄΪȫ·þÌáʾ
|
# @change: "2014-06-05 18:00" hxp ÐÞ¸´Ä³Ð©Çé¿öÏÂÍæ¼ÒÉÏÒ»³¡¸±±¾¼Ç¼²»»áÖØÖÃÎÊÌâ
|
# @change: "2014-08-16 14:00" hxp »î¶¯Ö»ÔÚÒ»Ïß½øÐÐ
|
# @change: "2015-03-16 10:00" hxp ÐÞ¸´±³°ü¿Õ¼ä²»×ãʱÁìȡÿÈÕ½±ÀøÎÊÌâ
|
# @change: "2016-08-10 20:00" hxp ÐÞ¸´×îºóÒ»·ÖÖÓ²¹Ê±½×¶ÎPK»á¼ÓPKÖµµÄbug
|
# @change: "2016-09-02 17:30" hxp ÆÁ±ÎÁìµØÕ½ÆÚ¼ä»÷ɱÎ޳ͷ£, ÓÉÁìµØÆìÇøÓò¾ö¶¨
|
# @change: "2016-11-03 21:30" hxp µ±ÈÕÕ½Ã˱ä¸üʱÁì½±ÅжÏÓÅ»¯
|
# @change: "2016-11-09 21:30" xdh ÿ´Î»î¶¯ÖØÐ¿ªÊ¼Ê±ÖØÖÃÕ¼ÁìȨ
|
# @change: "2016-12-28 00:00" hxp ¶áÆìÔö¼ÓְλÏÞÖÆ£»Ôö¼ÓÕ½Ã˵ȼ¶¶ÔÓ¦Õ¼Áì¸öÊýÏÞÖÆ£»Ôö¼ÓÃËÖ÷רÊô³á°ò£»Ôö¼Ó»î¶¯ÖÐÕ½ÃËÊôÐÔ½±Àø£»ÐÞ¸ÄÿÈÕ½±Àø
|
#
|
#---------------------------------------------------------------------
|
#"""Version = 2016-12-28 00:00"""
|
#---------------------------------------------------------------------
|
|
import PlayerFamily
|
import ChPyNetSendPack
|
import IPY_GameWorld
|
import NetPackCommon
|
import PlayerControl
|
import ReadChConfig
|
import ShareDefine
|
import SkillCommon
|
import ItemCommon
|
import GameWorld
|
import AICommon
|
import ChConfig
|
import FBCommon
|
import ItemControler
|
import DataRecordPack
|
import GameMap
|
import BuffSkill
|
|
Key_ManorWarState = ShareDefine.Def_Notify_WorldKey_ManorWar
|
|
# ¸±±¾Ïà¹Ø×Öµäkey
|
ManorWarDict_StartTick = "ManorWar_StartTick" # ÁìµØÕ½»î¶¯¿ªÊ¼Ê±¼ä
|
ManorWarDict_LastRefreshTick = "ManorWar_LastRefreshTick" # ÁìµØÕ½Éϴδ¦ÀíË¢ÐÂʱ¼ä
|
ManorWarDict_LastAwardTick = "ManorWar_LastAwardTick" # ÁìµØÕ½ÉÏ´ÎÕ½³¡¸£Àûʱ¼ä
|
ManorWarDict_CollectFlagTick = "ManorWar_CollectFlagTick" # ÆäËûÕ½ÃË°ÎÆìʱ¼ä
|
ManorWarDict_OwnFlagTickTotal = "ManorWar_OwnFlagTickTotal" # ÆäËûÕ½ÃËÓµÓÐÕ½Æìʱ³¤
|
ManorWarDict_GetFlagFamilyID = "ManorWar_GetFlagFamilyID" # »ñµÃÕ½ÆìµÄÕ½ÃËid£¬²»´ú±í»ñʤսÃË
|
ManorWarDict_WinFamilyID = "ManorWar_WinFamilyID" # ¼Ç¼»ñʤսÃËid£¬¿ÉÄÜΪ0
|
ManorWarDict_HadWinResult = "ManorWarDict_HadWinResult" # ¼Ç¼ÊÇ·ñÓлñʤ½á¹û£¬²»´ú±í»î¶¯Ê±¼ä½áÊø
|
|
|
# ¸±±¾Íæ¼Ò×Öµäkey
|
ManorWarPlayerDict_LastEnterServerDay = 'ManorWarPlayer_LastEnterServerDay' # Íæ¼ÒÉÏÒ»´Î½øÈëÕ½³¡µÄ¿ª·þÌì
|
ManorWarPlayerDict_RefreshTick = 'ManorWarPlayer_RefreshTick' # Íæ¼ÒÕ½³¡Í£ÁôË¢ÐÂTick
|
ManorWarPlayerDict_StayTick = 'ManorWarPlayer_StayTick' # Íæ¼Ò±¾Õ½³¡Í£ÁôÀÛ¼ÆTick
|
ManorWarPlayerDict_GetExpTotal = 'ManorWarPlayer_GetExpTotal' # Íæ¼Ò±¾Õ½³¡»ñµÃ¾ÑéÀÛ¼Æ
|
ManorWarPlayerDict_GetZhenQiTotal = 'ManorWarPlayer_GetZhenQiTotal' # Íæ¼Ò±¾Õ½³¡»ñµÃÕæÆøÀÛ¼Æ
|
|
|
Def_Action_Close = 0 #¹Ø±Õ±êʶ
|
Def_Action_Open = 1 #¿ªÆô±êʶ
|
Def_Action_ReadyOver = 98 # ×¼±¸½áÊø
|
Def_Action_DoOver = 99 #½áËã±êʶ
|
|
|
# ÁìµØÕ½¹«¹²ÅäÖÃ
|
(
|
Def_Time_OverTime, # »î¶¯Ê±³¤
|
Def_Time_FlagPrepare, # Õ¼ÁìÆìÖÄÐè²É¼¯Ê±¼ä£¬Ãë
|
Def_Time_Win, # »ñµÃÁìµØÕ¼ÁìȨÐèÒªµÄʱ¼ä£¬Ãë
|
Def_Time_JoinAward, # ¿É»ñµÃ»î¶¯½áÊøµÄÕ½Ã˲ÎÓë½±ÀøÐèÒª´ýÔÚÕ½³¡µÄʱ¼ä£¬Ãë
|
Def_JoinAwardFamilyActiveList, # ²ÎÓë½±£¬Õ½Ã˻¶È[ʤÀû·½, ʧ°Ü·½]
|
Def_JoinAwardExpList, # ²ÎÓë½±£¬»ñµÃµÄ¾Ñ鹫ʽ[ʤÀû·½, ʧ°Ü·½]
|
Def_GetFlagNeedMemberLV, # ¶áÆìËùÐèµÄְλ
|
Def_FamilyLVGetFlagCntDict, # Õ½Ã˵ȼ¶¶ÔÓ¦¿ÉÕ¼ÁìÁìµØÊý {Õ½Ã˵ȼ¶:¿ÉÕ¼ÁìÊý, ...}
|
Def_LeaderWingSkinInfo, # ÃËÖ÷רÊô³á°ò[ËùÐèÕ¼ÁìÁìµØÊý, ³á°òƤ·ôID]
|
) = range(9)
|
|
|
# ÁìµØÌØÊâÐÅÏ¢ÅäÖÃ
|
(
|
Def_CollectLVLimit, # ²É¼¯Õ½ÆìÍæ¼ÒµÈ¼¶ÏÞÖÆ
|
Def_CollectFamilyMoneyCost, # ²É¼¯Õ½ÆìÏûºÄµÄÕ½ÃË×ʽð
|
Def_TimeAward, # Õ½³¡¶¨Ê±¸£Àû
|
) = range(3)
|
|
g_winFamilyName = ""
|
g_getFlagFamilyName = ""
|
|
|
## »ñµÃ¸±±¾ÅäÖÃ
|
# @param None
|
# @return ÅäÖÃÐÅÏ¢
|
def __GetManorWarCfg():
|
return ReadChConfig.GetEvalChConfig("ManorWarCfg")
|
|
|
## ÁìµØÕ½µØÍ¼Áбí
|
# @param None
|
# @return ÅäÖÃÐÅÏ¢
|
def __GetManorWarMapID():
|
return ReadChConfig.GetEvalChConfig("ManorWarMapID")
|
|
|
## ÁìµØÕ½ÐÅÏ¢
|
# @param mapID: µØÍ¼id
|
# @return ÅäÖÃÐÅÏ¢
|
def __GetManorWarInfo(mapID):
|
manorWarInfoDict = ReadChConfig.GetEvalChConfig("ManorWarInfo")
|
if mapID not in manorWarInfoDict:
|
GameWorld.ErrLog("ÁìµØÕù¶áÕ½ mapID=%s not in ManorWarInfo.txt" % mapID)
|
return []
|
|
return manorWarInfoDict[mapID]
|
|
## ÁìµØÕ½ÊÇ·ñ»î¶¯ÖÐ
|
# @param None
|
# @return
|
def IsManorWarFighting():
|
nowState = GameWorld.GetGameWorld().GetGameWorldDictByKey(Key_ManorWarState)
|
return nowState in [Def_Action_Open, Def_Action_ReadyOver]
|
|
## ÊÇ·ñÁìµØÕ½µØÍ¼
|
# @param None
|
# @return
|
def IsManorWarMap(curPlayer=None):
|
mapID = GameWorld.GetGameWorld().GetMapID()
|
|
if mapID not in __GetManorWarMapID():
|
return False
|
|
# Ö»ÔÚÒ»Ï߻
|
lineID = GameWorld.GetGameWorld().GetLineID()
|
if lineID != 0:
|
if curPlayer:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_493562")
|
return False
|
|
return True
|
|
## ÁìµØÕ½»î¶¯×´Ì¬¸Ä±ä
|
# @param value: ״ֵ̬
|
# @param tick
|
# @return
|
def OnManorWarStateChange(value, tick):
|
if not IsManorWarMap():
|
return
|
|
curState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ManorWar)
|
|
# ±¾µØÍ¼ÒÑÊǸÃÖµ£¬²»´¦Àí£¬ÆäËûµØÍ¼Æô¶¯»áÔÙ´Îͬ²½
|
if curState == value:
|
GameWorld.DebugLog("OnManorWarStateChange ÒÑÊǸÃÖµ£¬²»´¦Àí£¡value=%s" % value)
|
return
|
|
if value == Def_Action_Open:
|
__OnOpen(tick)
|
elif value == Def_Action_ReadyOver:
|
__OnClose(tick)
|
elif value == Def_Action_DoOver:
|
__OnDoOver(tick)
|
|
return
|
|
## »ñÈ¡ÉÏÒ»³¡»ñʤսÃËid
|
# @param None
|
# @return
|
def __GetLastWinFamilyID():
|
mapID = GameWorld.GetGameWorld().GetMapID()
|
winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID
|
winFamilyID = GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey)
|
return winFamilyID
|
|
## ÁìµØÕ½OnDay
|
# @param curPlayer
|
# @return
|
def ManorWarOnDay(curPlayer):
|
# ÖØÖÃÿÈÕ½±ÀøÁìÈ¡¼Ç¼
|
__UpdDailyAwardRecord(curPlayer, 0)
|
return
|
|
## ÁìµØÕ½OnLogin
|
# @param curPlayer
|
# @param tick
|
# @return
|
def OnLogin(curPlayer, tick):
|
CheckManorwarWinLeaderID(curPlayer)
|
|
# ¸üÐÂÁìµØÕ½²ÎÓë½±
|
warServerDayKey = ShareDefine.Def_Notify_WorldKey_ManorWarServerDay
|
warServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(warServerDayKey)
|
|
joinDay = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay)
|
# ÉϴβÎÓëʱ¼äÓëÉϴλʱ¼ä²»Ò»Ö£¬±íʾÉϴλľÓвμӣ¬ÖØÖòÎÓë״̬
|
if joinDay != warServerDay:
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, 0)
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 0)
|
GameWorld.DebugLog("ÁìµØÕ½ OnLogin ÉϴλľÓвμӣ¬ÖØÖÃÐÅÏ¢£¡ÉϴλÌì=%s,ÉϴβÎÓëÌì=%s"
|
% (warServerDay, joinDay), curPlayer.GetPlayerID())
|
|
# ֪ͨÁìµØÕ½½á¹û
|
Sync_ManorWarResult(curPlayer, 0)
|
Sync_ManorDailyAward(curPlayer)
|
return
|
|
## ÁìµØÕ½__OnOpen
|
# @param tick
|
# @return
|
def __OnOpen(tick):
|
global g_winFamilyName
|
global g_getFlagFamilyName
|
|
GameWorld.DebugLog("__OnOpen manorWar...")
|
|
gameFB = GameWorld.GetGameFB()
|
|
# »î¶¯Êý¾Ý³õʼ»¯
|
gameFB.SetGameFBDict(ManorWarDict_StartTick, tick)
|
gameFB.SetGameFBDict(ManorWarDict_LastRefreshTick, tick)
|
gameFB.SetGameFBDict(ManorWarDict_LastAwardTick, tick)
|
gameFB.SetGameFBDict(ManorWarDict_CollectFlagTick, 0)
|
gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, 0)
|
gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, 0)
|
gameFB.SetGameFBDict(ManorWarDict_WinFamilyID, 0)
|
gameFB.SetGameFBDict(ManorWarDict_HadWinResult, 0)
|
g_winFamilyName = ""
|
g_getFlagFamilyName = ""
|
# ¸ü¸ÄΪÿ´Î¿ªÊ¼¶¼ÖØÖÃ
|
# ÉèÖÃÆìÖÄĬÈÏÓµÓÐÕßΪÉÏÒ»´Î»î¶¯µÄ»ñʤսÃË
|
#lastWinFamilyID = __GetLastWinFamilyID()
|
#gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, lastWinFamilyID)
|
|
# µØÍ¼Íæ¼Ò¼ÓÈëÕ½³¡
|
playerManager = GameWorld.GetMapCopyPlayerManager()
|
for index in range(0, playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not curPlayer:
|
continue
|
|
__DoPlayerJoinWar(curPlayer, tick)
|
|
# ×¢Òâ±¾»î¶¯×îºÃ²»ÒªÓÃClearAllPlayerGameFBDictÀ´ÖØÖø±±¾Íæ¼Ò×ÖµäÐÅÏ¢£¬ÒòΪ±¾»î¶¯µÄµØÍ¼²¢·Ç¶ÀÁ¢»î¶¯µØÍ¼
|
# ÈôʹÓø÷½Ê½ÖØÖ㬿ÉÄܻᵼÖÂÆäËû¹¦ÄܼǼµÄÁÙʱ¼Ç¼±»Çå³ý
|
return
|
|
|
## »ñÈ¡ÁìµØÕ½Ê£Óàʱ¼ä__GetRemainTick
|
# @param tick
|
# @return
|
def __GetRemainTick(tick):
|
gameFB = GameWorld.GetGameFB()
|
# ÉèÖõØÍ¼ÁìµØÕ½»î¶¯¿ªÊ¼Ê±¼ä
|
startTick = gameFB.GetGameFBDictByKey(ManorWarDict_StartTick)
|
passTick = max(0, tick - startTick)
|
remainTick = max(0, __GetManorWarCfg()[Def_Time_OverTime] * 1000 - passTick)
|
GameWorld.DebugLog("__GetRemainTick ÁìµØÕ½ remainTick=%s" % remainTick)
|
return remainTick
|
|
|
## ÁìµØÕ½¹Ø±Õ
|
# @param tick
|
# @return
|
def __OnClose(tick):
|
GameWorld.DebugLog("__OnClose manorWar...")
|
# ÊÕµ½GameServer֪ͨ»î¶¯½áÊø£¬Í¨ÖªGameServer±¾ÁìµØÕ¼Áì½á¹û
|
# ×¢£º´Ëʱ»¹ÎÞ·¨½áËã»î¶¯£¬ÐèµÈ¸÷ÁìµØÍ¨ÖªGameServerºó£¬ÓÉGameServer·¢Æð½áËã֪ͨ
|
__DoWinLogic()
|
return
|
|
|
##Õ½³¡½áËã´¦Àí
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞÒâÒå
|
def __OnDoOver(tick):
|
GameWorld.DebugLog("__OnDoOver manorWar...")
|
|
playerManager = GameWorld.GetMapCopyPlayerManager()
|
for index in range(0, playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not curPlayer:
|
continue
|
|
__DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])
|
CheckManorwarWinLeaderID(curPlayer)
|
|
if curPlayer.GetFamilyID() <= 0:
|
continue
|
|
Sync_ManorWarResult(curPlayer, 1)
|
|
return
|
|
|
##Íæ¼Ò½øÈ븱±¾
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞÒâÒå
|
# @remarks Íæ¼Ò½øÈ븱±¾
|
def DoEnterFB(curPlayer, tick):
|
if not IsManorWarMap():
|
return
|
|
if not IsManorWarFighting():
|
return
|
|
GameWorld.DebugLog("ÁìµØÕ½ DoEnterFB...")
|
|
__DoPlayerJoinWar(curPlayer, tick)
|
return
|
|
|
##Íæ¼Ò¼ÓÈëÕ½³¡
|
# @param curPlayer
|
# @param tick
|
# @return
|
def __DoPlayerJoinWar(curPlayer, tick):
|
GameWorld.DebugLog("ÁìµØÕ½ __DoPlayerJoinWar...", curPlayer.GetPlayerID())
|
gameFB = GameWorld.GetGameFB()
|
# Èç¹ûÔڻÖУ¬ÇҲμӻµÄÌìÊý²»µÈÓÚµ±Ç°¿ª·þÌìÊý£¬ÔòÖØÖøüÐÂ
|
serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
|
lastJoinDay = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay)
|
if lastJoinDay != serverDay:
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay, serverDay)
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, 0)
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 0)
|
Sync_ManorWarResult(curPlayer, 0)
|
|
GameWorld.DebugLog(" ¸üвÎÓëÌìÊý=%s£¬ÉÏ´ÎÌì=%s, ÖØÖôýÕ½³¡×Üʱ¼ä£¬²ÎÓ뽱״̬£¡"
|
% (serverDay, lastJoinDay), curPlayer.GetPlayerID())
|
|
lastEnterServerDay = gameFB.GetPlayerGameFBDictByKey(curPlayer.GetPlayerID(),
|
ManorWarPlayerDict_LastEnterServerDay)
|
if lastEnterServerDay != serverDay:
|
gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_LastEnterServerDay, serverDay)
|
gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_StayTick, 0)
|
gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_GetExpTotal, 0)
|
gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_GetZhenQiTotal, 0)
|
GameWorld.DebugLog(" ¸üнøÈë¸ÃÕ½³¡ÌìÊý=%s£¬ÉÏ´ÎÌì=%s, ÖØÖÃÍæ¼Ò¸ÃÕ½³¡Ïà¹Ø×ÖµäÐÅÏ¢£¡"
|
% (serverDay, lastEnterServerDay), curPlayer.GetPlayerID())
|
|
curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)
|
|
__UpdateGetFlagBuff(curPlayer, curFlagFamilyID, tick)
|
|
# ¼ÇÂ¼Íæ¼Ò½ø³¡Ë¢ÐÂʱ¼ä
|
gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_RefreshTick, tick)
|
|
# ֪ͨ»î¶¯Ê£Óàʱ¼ä
|
curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, __GetRemainTick(tick), True)
|
return
|
|
|
##Íæ¼ÒÍ˳ö
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞÒâÒå
|
def DoExitFB(curPlayer, tick):
|
if not IsManorWarMap():
|
return False
|
|
if not IsManorWarFighting():
|
return False
|
|
GameWorld.DebugLog("__DoPlayerExitManorWar...")
|
__DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])
|
return
|
|
|
##¸±±¾¶¨Ê±Æ÷
|
# @param tick ʱ¼ä´Á
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks ¸±±¾¶¨Ê±Æ÷
|
def OnProcess(tick):
|
if not IsManorWarMap():
|
return
|
|
if not IsManorWarFighting():
|
return
|
|
gameFB = GameWorld.GetGameFB()
|
|
mapID = GameWorld.GetGameWorld().GetMapID()
|
manorWarInfo = __GetManorWarInfo(mapID)
|
if not manorWarInfo:
|
return
|
|
awardInterval, expFormat, zhenQiFormat = manorWarInfo[Def_TimeAward]
|
|
refreshInterval = min(awardInterval, 15) * 1000
|
lastRefreshTick = gameFB.GetGameFBDictByKey(ManorWarDict_LastRefreshTick)
|
if tick - lastRefreshTick < refreshInterval:
|
return
|
|
gameFB.SetGameFBDict(ManorWarDict_LastRefreshTick, tick)
|
#GameWorld.DebugLog("ÁìµØÕ½ OnProcess...")
|
|
isGiveAward = False
|
lastAwardTick = gameFB.GetGameFBDictByKey(ManorWarDict_LastAwardTick)
|
if tick - lastAwardTick > awardInterval * 1000:
|
awardTick = lastAwardTick + awardInterval * 1000
|
#GameWorld.DebugLog(" Õ½³¡¸£Àûʱ¼ä£º%s" % (awardTick))
|
awardTick = min(awardTick, ChConfig.Def_UpperLimit_DWord)
|
gameFB.SetGameFBDict(ManorWarDict_LastAwardTick, awardTick)
|
isGiveAward = True
|
|
|
# ¸üÐÂÍæ¼ÒÕ½³¡³ÖÐøÊ±¼ä
|
playerManager = GameWorld.GetMapCopyPlayerManager()
|
for index in range(0, playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not curPlayer:
|
continue
|
|
if curPlayer.GetFamilyID() <= 0:
|
continue
|
|
__WarPlayerProcess(curPlayer, isGiveAward, expFormat, zhenQiFormat, tick)
|
|
# Èç¹ûÒѾÓлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦ÀíÆìÖÄÕ¼Áìʱ¼ä
|
if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult):
|
#GameWorld.DebugLog(" ÒѾÓлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦ÀíÆìÖÄÕ¼Áìʱ¼ä...")
|
return
|
|
# ÅжÏÕ¼Áìʱ¼ä
|
curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)
|
lastWinFamilyID = __GetLastWinFamilyID()
|
# ²»ÊÇÉÏÒ»´Î»î¶¯Ê¤ÀûÕ½Ã˲Ŵ¦ÀíÕ¼Áì»ñʤÂß¼
|
if curFlagFamilyID > 0 and curFlagFamilyID != lastWinFamilyID:
|
collectFlagTick = gameFB.GetGameFBDictByKey(ManorWarDict_CollectFlagTick)
|
ownTickTotal = tick - collectFlagTick
|
gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, ownTickTotal)
|
#GameWorld.DebugLog(" Õ½ÃËid=%s Õ½Æì ²É¼¯tick=%s,tick=%s,ÓµÓÐʱ³¤=%s"
|
# % (curFlagFamilyID, collectFlagTick, tick, ownTickTotal))
|
if ownTickTotal >= __GetManorWarCfg()[Def_Time_Win] * 1000:
|
# Ö´ÐÐÕ½ÃË»ñʤÂß¼
|
__DoWinLogic(curFlagFamilyID)
|
|
return
|
|
|
##Õ½³¡Íæ¼Ò´¦Àí
|
# @param curPlayer
|
# @param isGiveAward
|
# @param expFormat
|
# @param zhenQiFormat
|
# @param tick
|
# @return
|
def __WarPlayerProcess(curPlayer, isGiveAward, expFormat, zhenQiFormat, tick):
|
gameFB = GameWorld.GetGameFB()
|
playerID = curPlayer.GetPlayerID()
|
|
refreshTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_RefreshTick)
|
if refreshTick <= 0:
|
#GameWorld.DebugLog("__WarPlayerProcess refreshTick=0", curPlayer.GetPlayerID())
|
return
|
|
addTick = max(0, tick - refreshTick)
|
#GameWorld.DebugLog(" __WarPlayerProcess tick=%s,refreshTick=%s,addTick=%s"
|
# % (tick, refreshTick, addTick))
|
gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_RefreshTick, tick)
|
|
# ¸üб¾Õ½³¡ÀÛ¼ÆÊ±¼ä
|
curContinueTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_StayTick)
|
updTick = curContinueTick + addTick
|
updTick = min(updTick, ChConfig.Def_UpperLimit_DWord)
|
gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_StayTick, updTick)
|
#GameWorld.DebugLog(" ¸üдýÔÚ±¾Õ½³¡Ê±¼ä£ºcurTick=%s,addTick=%s,updTick=%s"
|
# % (curContinueTick, addTick, updTick), playerID)
|
|
# ¸üÐÂÕ½³¡×ÜÀÛ¼ÆÊ±¼ä
|
allContinueTick = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick)
|
updTick = allContinueTick + addTick
|
updTick = min(updTick, ChConfig.Def_UpperLimit_DWord)
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, updTick)
|
# ³¬¹ý¿ÉÁìÈ¡²ÎÓ뽱ʱ¼ä£¬ÉèÖÃΪ¿ÉÁìÈ¡
|
if updTick >= __GetManorWarCfg()[Def_Time_JoinAward] * 1000 \
|
and FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState) != 1:
|
#GameWorld.DebugLog(" ÉèÖÿÉÁìÈ¡ÁìµØÕ½²ÎÓë½±£¡")
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 1)
|
|
#GameWorld.DebugLog(" ¸üдýÔÚÕ½³¡×Üʱ¼ä£ºcurTick=%s,addTick=%s,updTick=%s"
|
# % (allContinueTick, addTick, updTick), playerID)
|
|
# Õ½³¡¸£Àû
|
if not isGiveAward:
|
return
|
|
reLV = curPlayer.GetLV()
|
reExp = PlayerControl.GetPlayerReExp(curPlayer)
|
addExp = eval(expFormat)
|
addZhenQi = eval(zhenQiFormat)
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
playerControl.AddExp(addExp)
|
PlayerControl.PlayerAddZhenQi(curPlayer, addZhenQi, True, True, "ManorWar")
|
|
totalExp = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetExpTotal) + addExp
|
totalZhenQi = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetZhenQiTotal) + addZhenQi
|
gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_GetExpTotal, totalExp)
|
gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_GetZhenQiTotal, totalZhenQi)
|
#GameWorld.DebugLog(" Õ½³¡¸£ÀûreLV=%s,reExp=%s,addExp=%s,addZQ=%s,totalExp=%s,totalZQ=%s"
|
# % (reLV, reExp, addExp, addZhenQi, totalExp, totalZhenQi), playerID)
|
return
|
|
|
##ʤÀûÂß¼´¦Àí
|
# @param winFamilyID ĬÈÏid0
|
# @return
|
def __DoWinLogic(winFamilyID=0):
|
global g_winFamilyName
|
GameWorld.DebugLog("ÁìµØÕ½ __DoWinLogic()...winFamilyID=%s" % winFamilyID)
|
|
gameFB = GameWorld.GetGameFB()
|
|
if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult):
|
GameWorld.DebugLog(" ÒѾÓлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦Àí»ñʤÂß¼...")
|
return
|
|
getFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)
|
lastWinFamilyID = __GetLastWinFamilyID()
|
|
# ûÓлñʤսÃË
|
if winFamilyID <= 0:
|
# Èç¹ûÓÐÉÏÒ»´Î»î¶¯Ê¤ÀûÕ½ÃË£¬Ôò´ú±í·ÀÊØ³É¹¦
|
if lastWinFamilyID > 0:
|
winFamilyID = lastWinFamilyID
|
|
# Èç¹ûÉÏÒ»´Î»î¶¯Ã»Óб»Õ¼Á죬Ôò»ñʤÕßΪµ±Ç°»ñµÃÕ½ÆìµÄÕ½ÃË
|
elif getFlagFamilyID > 0:
|
winFamilyID = getFlagFamilyID
|
|
# ÎÞÈËÕ¼Áì
|
else:
|
pass
|
|
if winFamilyID == getFlagFamilyID:
|
g_winFamilyName = g_getFlagFamilyName
|
|
|
gameFB.SetGameFBDict(ManorWarDict_WinFamilyID, winFamilyID)
|
gameFB.SetGameFBDict(ManorWarDict_HadWinResult, 1)
|
|
# ֪ͨGameServer¸üÐÂÕ¼ÁìȨ
|
mapID = GameWorld.GetGameWorld().GetMapID()
|
sendMsg = '%s' % ([mapID, winFamilyID])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'ManorWarWinner',
|
sendMsg, len(sendMsg))
|
return
|
|
|
##»ñµÃ¸±±¾°ïÖúÐÅÏ¢, ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞÒâÒå
|
# @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ
|
def DoFBHelp(curPlayer, tick):
|
if not IsManorWarMap():
|
return False
|
|
if not IsManorWarFighting():
|
return False
|
|
gameFB = GameWorld.GetGameFB()
|
|
playerID = curPlayer.GetPlayerID()
|
getExp = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetExpTotal)
|
getZhenQi = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetZhenQiTotal)
|
stayTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_StayTick)
|
curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)
|
getName = g_getFlagFamilyName if curFlagFamilyID else ''
|
winFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_WinFamilyID)
|
winName = g_winFamilyName if winFamilyID else ''
|
helpDict = {
|
'isOver':gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult),
|
'winName':winName, 'getName':getName,
|
'ownTick':gameFB.GetGameFBDictByKey(ManorWarDict_OwnFlagTickTotal),
|
'getExp':getExp, 'getZhenQi':getZhenQi, 'stayTick':stayTick
|
}
|
|
#GameWorld.DebugLog("DoFBHelp manorWar helpDict=%s" % str(helpDict), playerID)
|
|
#֪ͨ¸±±¾°ïÖú½çÃæ
|
FBCommon.Notify_FBHelp(curPlayer, helpDict)
|
return
|
|
|
##Íæ¼ÒÍ˳ö¼Ò×å´¦Àí
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ·µ»ØÖµÎÞÒâÒå
|
def OnLeaveFamily(curPlayer, tick):
|
GameWorld.DebugLog("OnLeaveFamily manorWar...")
|
if not IsManorWarMap():
|
return False
|
|
if not IsManorWarFighting():
|
return False
|
|
# ɾ³ý¶áÆìbuff
|
__DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])
|
return
|
|
## ¿É·ñ¹¥»÷
|
def CanManorWarAtk():
|
return IsManorWarMap() and IsManorWarFighting()
|
|
### Íæ¼Ò¹¥»÷Íæ¼ÒÊÇ·ñÓгͷ£
|
## @param atkPlayer: ¹¥»÷·½
|
## @param defPlayer: ·ÀÊØ·½
|
## @return Íæ¼Ò¹¥»÷Íæ¼ÒÊÇ·ñÓгͷ£
|
#def DoFBAttackHasPunish(atkPlayer, defPlayer):
|
# # Èç¹ûÔÚÁìµØÕ½µØÍ¼£¬ÇÒÔڻÖУ¬PKÎ޳ͷ£
|
# if IsManorWarMap() and IsManorWarFighting():
|
# return False
|
#
|
# return True
|
|
|
##¸±±¾ÖÐ,Õ¼ÁìNPCµÄLoadingʱ¼ä.
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curNPC NPCʵÀý
|
# @return ·µ»ØÖµ, Loadingʱ¼ä
|
# @remarks ¸±±¾ÖÐ,Õ¼ÁìNPCµÄLoadingʱ¼ä
|
def GetFBPrepareTime(curPlayer, curNPC):
|
return __GetManorWarCfg()[Def_Time_FlagPrepare] * 1000
|
|
|
##ÊÇ·ñ¿ÉÒÔ¶áÆì
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param curNPC NPCʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞÒâÒå
|
# @remarks
|
def OnCanCollect(curPlayer, curNPC, tick):
|
if not IsManorWarMap(curPlayer):
|
return
|
|
# ûÓÐÕ½Ã˵IJ»Äܲɼ¯
|
if curPlayer.GetFamilyID() <= 0:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_273188")
|
return
|
|
gameFB = GameWorld.GetGameFB()
|
|
# ·ÇÕ½¶·½×¶Î²»¿É²É¼¯
|
if not IsManorWarFighting():
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_740826")
|
return False
|
|
# Èç¹ûÒѾÓÐʤÀû½á¹û£¬Ôò²»ÐèÒªÔÙ´¦Àí
|
if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult):
|
curWinFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_WinFamilyID)
|
if curWinFamilyID <= 0 or curWinFamilyID == curPlayer.GetFamilyID():
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_740826")
|
else:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_341290")
|
return
|
|
# ÒÑ»ñµÃÕ½ÆìµÄÕ½Ã˲»¿É²É¼¯
|
getFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)
|
if getFlagFamilyID == curPlayer.GetFamilyID():
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_976459")
|
return False
|
|
manorCfg = __GetManorWarCfg()
|
# ËùÐè³ÉԱְλ
|
if curPlayer.GetFamilyMemberLV() < manorCfg[Def_GetFlagNeedMemberLV]:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_221749")
|
return False
|
|
# Õ½Ã˵ȼ¶¿ÉÕ¼ÁìÊýÁ¿
|
curFamilyGetCnt = 0
|
warMapList = __GetManorWarMapID()
|
for mapID in warMapList:
|
tempFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarTempFamilyID % mapID
|
if GameWorld.GetGameWorld().GetGameWorldDictByKey(tempFamilyIDKey) == curPlayer.GetFamilyID():
|
curFamilyGetCnt += 1
|
canGetCnt = manorCfg[Def_FamilyLVGetFlagCntDict].get(curPlayer.GetFamilyLV(), 0)
|
if canGetCnt <= curFamilyGetCnt:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_577188", [curPlayer.GetFamilyLV(), canGetCnt])
|
return False
|
|
mapID = GameWorld.GetGameWorld().GetMapID()
|
manorWarInfo = __GetManorWarInfo(mapID)
|
if not manorWarInfo:
|
return False
|
|
# ²É¼¯µÈ¼¶
|
limitLV = manorWarInfo[Def_CollectLVLimit]
|
if limitLV > curPlayer.GetLV():
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_818877", [limitLV])
|
return False
|
|
# ²É¼¯Õ½ÃË×ʽðÏûºÄ
|
familyMoneyCost = manorWarInfo[Def_CollectFamilyMoneyCost]
|
familyMoney = curPlayer.GetFamilyMoney()
|
if familyMoney < familyMoneyCost:
|
PlayerControl.NotifyCode(curPlayer, "Collect_liubo_817032", [familyMoneyCost])
|
return False
|
|
return True
|
|
|
##Íæ¼ÒÊÕ¼¯³É¹¦(Ëþ, Æì)
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞÒâÒå
|
# @remarks
|
def OnCollectOK(curPlayer, tick):
|
global g_getFlagFamilyName
|
|
if not IsManorWarMap(curPlayer):
|
return
|
|
GameWorld.DebugLog("ManorWar OnCollectOK...familyID=%s,tick=%s"
|
% (curPlayer.GetFamilyID(), tick), curPlayer.GetPlayerID())
|
|
# ·ÇÕ½¶·½×¶Î²»¿É²É¼¯
|
if not IsManorWarFighting():
|
return False
|
|
# Èç¹ûÒѾÓнá¹û£¬Ôò²»¿É²É¼¯
|
gameFB = GameWorld.GetGameFB()
|
if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult) > 0:
|
return
|
|
tagObj = curPlayer.GetActionObj()
|
|
if not tagObj:
|
return
|
|
if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC:
|
return
|
|
curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex())
|
AICommon.ClearPlayerPreparing(curNPC)
|
|
curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)
|
nextFlagFamilyID = curPlayer.GetFamilyID()
|
if nextFlagFamilyID <= 0:
|
return
|
|
if curFlagFamilyID == nextFlagFamilyID:
|
return
|
|
mapID = curPlayer.GetMapID()
|
manorWarInfo = __GetManorWarInfo(mapID)
|
if not manorWarInfo:
|
return False
|
|
familyMoneyCost = manorWarInfo[Def_CollectFamilyMoneyCost]
|
# ·¢ËÍÇëÇóµ½ÊÀ½ç·þÎñÆ÷¿Û³ý°ÎÆìÏûºÄ[familyID, ÏûºÄ×ʽð]
|
sendMsg = '%s' % ([mapID, nextFlagFamilyID, familyMoneyCost])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'ManorWarGetFlagCost',
|
sendMsg, len(sendMsg))
|
|
# ¸üÐÂÕ½Æì¹éÊôÐÅÏ¢£¬»ñµÃÕ½Æìʱ¼ä£¬ÖØÖÃÓµÓÐÕ½Æìʱ¼ä
|
gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, nextFlagFamilyID)
|
lastWinFamilyID = __GetLastWinFamilyID()
|
if nextFlagFamilyID != lastWinFamilyID:
|
gameFB.SetGameFBDict(ManorWarDict_CollectFlagTick, tick)
|
gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, 0)
|
|
# ¸üÐÂÕ½ÆìbuffÌØÐ§
|
for index in range(GameWorld.GetMapCopyPlayerManager().GetPlayerCount()):
|
player = GameWorld.GetMapCopyPlayerManager().GetPlayerByIndex(index)
|
if not player:
|
continue
|
|
__UpdateGetFlagBuff(player, nextFlagFamilyID, tick)
|
|
# Õ¼Áì¹ã²¥
|
PlayerControl.WorldNotify(0, "FB_liubo_149184", [curPlayer.GetFamilyName(),
|
curPlayer.GetPlayerName(), mapID, curNPC.GetNPCID()])
|
GameWorld.DebugLog(" lastWinFamilyID=%s,curFlagFamilyID=%s"
|
% (lastWinFamilyID, curFlagFamilyID), curPlayer.GetPlayerID())
|
# ¸øÒ»³¡»î¶¯Ê¤ÀûÕ½ÃË·¢ÆµµÀÏûÏ¢
|
if lastWinFamilyID > 0 and nextFlagFamilyID != lastWinFamilyID:
|
PlayerControl.FamilyNotify(lastWinFamilyID, "PK_liubo_293296", [mapID])
|
|
# ¸øÉÏÒ»´Î°ÎÆìÕ½ÃË·¢ÆµµÀÏûÏ¢
|
if curFlagFamilyID > 0 and curFlagFamilyID != lastWinFamilyID:
|
PlayerControl.FamilyNotify(curFlagFamilyID, "PK_liubo_293296", [mapID])
|
|
g_getFlagFamilyName = curPlayer.GetFamilyName()
|
return
|
|
##¸üжáÆìbuff
|
# @param curPlayer
|
# @param curFlagFamilyID
|
# @param tick
|
# @return ÎÞ
|
def __UpdateGetFlagBuff(curPlayer, curFlagFamilyID, tick):
|
# ÇåÌØÐ§
|
if curPlayer.GetFamilyID() != curFlagFamilyID:
|
__DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])
|
|
# ¼ÓÌØÐ§
|
elif curPlayer.GetFamilyID() == curFlagFamilyID and curFlagFamilyID > 0:
|
SkillCommon.AddBuffBySkillType(curPlayer, ChConfig.Def_SkillID_GetFlagFamilyBuff, tick)
|
return
|
|
##ɾ³ýBUFF
|
# @param curPlayer Íæ¼Ò
|
# @param buffList BuffIDÁбí
|
# @return ÎÞ
|
# @remarks ɾ³ýBUFF
|
def __DelFBGameBuff(curPlayer, buffList):
|
tick = GameWorld.GetGameWorld().GetTick()
|
for skillTypeID in buffList:
|
if not skillTypeID or skillTypeID <= 0:
|
continue
|
|
BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick)
|
return
|
|
|
##²éÕÒÍæ¼ÒBUFF
|
# @param curPlayer Íæ¼Ò
|
# @param skillTypeID BuffID
|
# @return BUFFºÍBUFF¹ÜÀíÆ÷
|
# @remarks ²éÕÒÍæ¼ÒBUFF
|
def __FindBuffByID(curPlayer, skillTypeID):
|
findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID)
|
if not findSkill:
|
GameWorld.ErrLog("Êý¾Ý¿âÖÐûÓÐÕÒµ½¼¼ÄÜ£¬skillTypeID = %s" % skillTypeID)
|
return None, None
|
|
buffType = SkillCommon.GetBuffType(findSkill)
|
buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)
|
#ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö
|
if buffTuple == ():
|
return None, None
|
|
buffManager = buffTuple[0]
|
|
findBuff = buffManager.FindBuff(skillTypeID)
|
|
return findBuff, buffManager
|
|
###---------------------------------------------------------------------
|
##// AB 01 ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½± #tagCMGetManorWarJoinAward
|
## ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½±
|
# @param None
|
# @return None
|
def OnGetManorWarJoinAward(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
GameWorld.Log("ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½±...", curPlayer.GetPlayerID())
|
|
if curPlayer.GetFamilyID() <= 0:
|
GameWorld.Log(" Íæ¼ÒÎÞÕ½ÃË£¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())
|
return
|
|
if IsManorWarFighting():
|
GameWorld.Log(" »î¶¯ÖУ¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_672958")
|
return
|
|
forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward)
|
if forbidState&pow(2, ShareDefine.Def_FamActivity_Manor):
|
GameWorld.Log(" µ±Èջ¿ªÆôºó±ä¸ü¹ýÕ½ÃË£¬ÎÞ·¨ÁìÈ¡½±Àø!", curPlayer.GetPlayerID())
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_193917")
|
return
|
|
joinAwardState = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState)
|
if joinAwardState == 2:
|
GameWorld.Log(" ÒÑÁìÈ¡¹ý²ÎÓë½±!", curPlayer.GetPlayerID())
|
return
|
|
if joinAwardState == 0:
|
GameWorld.Log(" ûÓÐÁìÈ¡²ÎÓ뽱ȨÏÞ!", curPlayer.GetPlayerID())
|
return
|
|
familyWinState = __GetFamilyWarResult(curPlayer)
|
if familyWinState not in [1, 2]:
|
GameWorld.Log(" Õ½ÃËʤ¸ºÇé¿öδ֪!familyID=%s" % curPlayer.GetFamilyID(),
|
curPlayer.GetPlayerID())
|
return
|
|
awardIndex = 0 if familyWinState == 1 else 1 # ʤÀû0£¬Ê§°Ü1
|
|
reLV = curPlayer.GetLV()
|
reExp = PlayerControl.GetPlayerReExp(curPlayer)
|
|
familyActiveAwardList = __GetManorWarCfg()[Def_JoinAwardFamilyActiveList]
|
addFamilyActive = familyActiveAwardList[awardIndex]
|
expAwardList = __GetManorWarCfg()[Def_JoinAwardExpList]
|
addExp = eval(expAwardList[awardIndex])
|
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 2)
|
Sync_ManorWarResult(curPlayer, 0)
|
|
# PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addFamilyActive, True, \
|
# PlayerFamily.Def_AddFAVReason_ManorWar)
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_243780", [addFamilyActive])
|
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
playerControl.AddExp(addExp)
|
|
GameWorld.Log(" Õ½ÃËʤ¸º=%s,addFamilyActive=%s,addExp=%s£¬Áì½±OK!"
|
% (familyWinState, addFamilyActive, addExp), curPlayer.GetPlayerID())
|
return
|
|
|
##// AB 02 ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø #tagCMGetManorWarDailyAward
|
## ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø
|
# @param None
|
# @return None
|
def OnGetManorWarDailyAward(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
awardIndex = clientData.MapID # ½±ÀøË÷Òý
|
#GameWorld.Log("ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø, awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
|
|
familyID = curPlayer.GetFamilyID()
|
if familyID <= 0:
|
GameWorld.Log(" Íæ¼ÒÎÞÕ½ÃË£¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())
|
return
|
|
if IsManorWarFighting():
|
GameWorld.Log(" »î¶¯ÖУ¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_672958")
|
return
|
|
forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward)
|
if forbidState&pow(2, ShareDefine.Def_FamActivity_Manor):
|
GameWorld.Log(" µ±Èջ¿ªÆôºó±ä¸ü¹ýÕ½ÃË£¬ÎÞ·¨ÁìÈ¡½±Àø!", curPlayer.GetPlayerID())
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_193917")
|
return
|
|
awardRecord = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord)
|
if awardRecord&pow(2, awardIndex):
|
GameWorld.Log(" ÒÑÁìÈ¡¸ÃÁìµØµ±ÈÕ½±Àø£¬ÎÞ·¨ÁìÈ¡!", curPlayer.GetPlayerID())
|
PlayerControl.NotifyCode(curPlayer, "PK_liubo_341290")
|
return
|
|
winCnt = 0 # Õ¼ÁìµÄÁìµØÊý
|
winLeaderID = 0 # Õ¼ÁìʱµÄÃËÖ÷ID
|
mapIDList = __GetManorWarMapID()
|
for mapID in mapIDList:
|
winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID
|
if GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey) != familyID:
|
continue
|
winCnt += 1
|
leaderIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarFamilyLeaderID % mapID
|
winLeaderID = GameWorld.GetGameWorld().GetGameWorldDictByKey(leaderIDKey)
|
|
manorWarDailyAwardDict = ReadChConfig.GetEvalChConfig("ManorWarDailyAward")
|
if awardIndex not in manorWarDailyAwardDict:
|
GameWorld.ErrLog(" ûÓÐÅäÖÃÁìµØ¶ÔÓ¦½±Àø£¬Çë¼ì²éManorWarDailyAward.txt£¡awardIndex=%s"
|
% awardIndex, curPlayer.GetPlayerID())
|
return
|
needWinCnt, awardItemList, leaderItemExList = manorWarDailyAwardDict[awardIndex]
|
if needWinCnt > winCnt:
|
GameWorld.Log(" Õ¼ÁìÁìµØ¸öÊý²»×ã, ·¨ÁìÈ¡!needWinCnt(%s) > winCnt(%s),familyID=%s"
|
% (needWinCnt, winCnt, familyID), curPlayer.GetPlayerID())
|
return
|
|
totalItemList = awardItemList
|
if curPlayer.GetPlayerID() == winLeaderID:
|
totalItemList = awardItemList + leaderItemExList
|
|
# ¼ì²é±³°ü
|
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
|
if len(totalItemList) > packSpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
|
updAwardRecord = awardRecord|pow(2, awardIndex)
|
__UpdDailyAwardRecord(curPlayer, updAwardRecord)
|
|
# ¸ø½±Àø
|
packIndexList = [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere]
|
for itemID, itemCount, itemBind in totalItemList:
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, itemBind, packIndexList, True, showSysInfo=True)
|
|
addDataDict = {"AwardIndex":awardIndex, "WinLeaderID":winLeaderID, "AwardItemList":totalItemList}
|
DataRecordPack.DR_FuncGiveItem(curPlayer, "ManorWar", addDataDict)
|
return
|
|
## ¸üÐÂÿÈÕ½±Àø¼Ç¼
|
# @param curPlayer
|
# @param record
|
# @return
|
def __UpdDailyAwardRecord(curPlayer, record):
|
FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord, record)
|
|
# ֪ͨ±ä¸ü
|
Sync_ManorDailyAward(curPlayer)
|
return
|
|
###---------------------------------------------------------------------
|
|
## »ñÈ¡ÉÏÒ»³¡ÁìµØÕ½½á¹û
|
# @param curPlayer
|
# @return
|
def __GetFamilyWarResult(curPlayer, resultType=0):
|
# »î¶¯ÖÐĬÈÏΪδ֪
|
if (not resultType and IsManorWarFighting()) or curPlayer.GetFamilyID() <= 0:
|
return 0
|
|
warMapList = __GetManorWarMapID()
|
for mapID in warMapList:
|
winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID
|
winFamilyID = GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey)
|
# Ö»ÒªÓÐÒ»¸öÕ½³¡»ñʤ¾ÍËãʤÀû
|
if winFamilyID > 0 and winFamilyID == curPlayer.GetFamilyID():
|
return 1
|
|
return 2
|
|
|
## ͬ²½ÁìµØÕ½½á¹û
|
# @param curPlayer
|
# @param resultType ÀàÐÍ0-Êý¾Ýͬ²½£¬1-»î¶¯½áËãÊý¾Ý£¬¿Í»§¶Ë¸ù¾Ý´ËÀàÐ;ö¶¨ÊÇ·ñµ¯½çÃæ
|
# @return
|
def Sync_ManorWarResult(curPlayer, resultType):
|
manorWar = ChPyNetSendPack.tagMCManorWarResult()
|
manorWar.Clear()
|
manorWar.Type = resultType
|
manorWar.Result = __GetFamilyWarResult(curPlayer, resultType)
|
manorWar.JoinTime = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick)
|
manorWar.JoinAward = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState)
|
NetPackCommon.SendFakePack(curPlayer, manorWar)
|
return
|
|
|
## ͬ²½ÁìµØÕ½Ã¿ÈÕ½±Àø
|
# @param curPlayer
|
# @return
|
def Sync_ManorDailyAward(curPlayer):
|
dailyAward = ChPyNetSendPack.tagMCManorDailyAward()
|
dailyAward.Clear()
|
dailyAward.AwardRecord = FBCommon.GetFBPDictValue(curPlayer,
|
ChConfig.Def_PDict_ManorWarDailyAwardRecord)
|
NetPackCommon.SendFakePack(curPlayer, dailyAward)
|
return
|
|
def CalcManorWarFamilyAttrPrize(curPlayer, allAttrList):
|
# ¸ù¾ÝÉÏ´ÎÕ¼ÁìÁìµØÊýÁ¿»ñµÃÊôÐÔ½±Àø¼Ó³É
|
# Ö»ÔÚÁìµØPKÇøÓòÏíÊܼӳɣ¬ÇøÓòÒѾÑéÖ¤¹ý»î¶¯µÄÓÐЧÐÔ£¬ÕâÀï²»ÔÙÖØ¸´ÑéÖ¤£¬Ö»ÅжÏÊÇ·ñÁìµØPKÇøÓò¼´¿É
|
if GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) != ShareDefine.gatManor:
|
GameWorld.DebugLog("·ÇÁìµØPKÇøÓò, ²»ÏíÊܼӳÉ!", curPlayer.GetPlayerID())
|
return
|
|
warMapList = __GetManorWarMapID()
|
gameWorldMgr = GameWorld.GetGameWorld()
|
lastFamilyWinCntDict = {}
|
maxWinCnt = 0
|
for mapID in warMapList:
|
lastFamilyID = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ManorWarLastFamilyID % mapID)
|
if not lastFamilyID:
|
continue
|
updCnt = lastFamilyWinCntDict.get(lastFamilyID, 0) + 1
|
lastFamilyWinCntDict[lastFamilyID] = updCnt
|
if updCnt > maxWinCnt:
|
maxWinCnt = updCnt
|
|
familyID = curPlayer.GetFamilyID()
|
curWinCnt = lastFamilyWinCntDict.get(familyID, 0)
|
diffValue = maxWinCnt - curWinCnt
|
if diffValue <= 0:
|
GameWorld.DebugLog("²»ÏíÊÜÁìµØÕ½ÊôÐÔ¼Ó³É! Óë×î¶àÕ¼Áì¸öÊý²îֵΪ: %s, familyID=%s,lastFamilyWinCntDict=%s"
|
% (diffValue, familyID, lastFamilyWinCntDict), curPlayer.GetPlayerID())
|
return
|
|
GameWorld.DebugLog("ÁìµØÕ½ÊôÐÔ¼Ó³É: diffValue=%s,familyID=%s, %s"
|
% (diffValue, familyID, lastFamilyWinCntDict), curPlayer.GetPlayerID())
|
attrPrizeDict = ReadChConfig.GetEvalChConfig("ManorWarAttrPrize")
|
for attrName, attrFormat in attrPrizeDict.items():
|
PlayerControl.CalcAttrDict_Type(attrName, eval(attrFormat), allAttrList)
|
|
return
|
|
def CheckManorwarWinLeaderID(curPlayer):
|
return
|
|