From 6fbf23a813e98fb5560fcb43fd8789f7dd282650 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 04 十二月 2018 15:09:48 +0800
Subject: [PATCH] 4938 【后端】【1.3.100】仙魔之争,打死敌方后改成倒计时到2的时候再把人拉回起始点

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py |   55 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index 8afd776..2a94c9b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -41,6 +41,7 @@
 import PlayerViewCache
 import GameWorldBoss
 import PlayerTalk
+import PlayerTeam
 
 import copy
 import random
@@ -348,7 +349,9 @@
     
     # 玩家战盟名变更处理
     __OnFamilyNameChange(jionPlayer.GetPlayerID(), curFamily.GetName())
-    
+    #玩家缓存
+    PlayerViewCache.OnPlayerFamilyChange(jionPlayer.GetPlayerID(), curFamily.GetID(), curFamily.GetName())
+    PlayerTeam.OnTeamMemFamilyRefresh(jionPlayer, curFamily.GetID())
     #加入仙盟联赛成员
     GameWorldFamilyWar.AddFamilyWarMem(jionPlayer.GetPlayerID(), curFamily.GetID())
     GameWorldFamilyWar.CheckPlayerJoinFamilyWarInfo(jionPlayer)
@@ -1489,6 +1492,20 @@
     if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyRobBoss):        
         PlayerControl.NotifyCode(curPlayer, "FairyGrabBossExitError")
         return
+    #判断退出时间间隔
+    curTime = int(time.time())
+    lastLeaveFamilyTime = PlayerControl.GetLeaveFamilyTime(curPlayer)
+    if lastLeaveFamilyTime > 100:
+        remainTime = IpyGameDataPY.GetFuncCfg('ExitFairyTime', 2) - (curTime - lastLeaveFamilyTime)
+        if remainTime > 0:
+            PlayerControl.NotifyCode(curPlayer, "ExitFairyTime", [remainTime*1000])
+            return
+        updTime = 1 if IpyGameDataPY.GetFuncCfg('ExitFairyTime') > 1 else curTime
+    elif lastLeaveFamilyTime >= IpyGameDataPY.GetFuncCfg('ExitFairyTime')-1:
+        updTime = curTime
+    else:
+        updTime = lastLeaveFamilyTime+1
+    PlayerControl.SetLeaveFamilyTime(curPlayer, updTime)
     
     #XW_JZ_LeaveFamily   <n color="0,190,255">{%S1%}</n><n color="255,255,0">退出了家族!</n>  25  -   -
     NotifyAllFamilyMemberMsg(curFamily, curPlayer, "XW_JZ_LeaveFamily", [curPlayer.GetName()])
@@ -1504,7 +1521,7 @@
     __DoPlayerLeaveFamilyByID(curFamily, curPlayerID)
 
     DataRecordPack.DR_PlayerLeaveFamily(curPlayer, curFamily.GetID(), curFamily.GetName(), curFamily.GetCount(),
-                                        familyLV, curPlayer.GetPlayerID(), curPlayer.GetName(), familyLV)
+                                        familyLV, curPlayer.GetPlayerID(), curPlayer.GetName(), familyLV, updTime)
     
     if curFamily.GetCount() == 0:
         #玩家离开后, 家族没有人了 , 删除这个家族
@@ -1524,7 +1541,7 @@
     # 玩家战盟名变更处理
     __OnFamilyNameChange(leavePlayerID, '')
     AddFamilyIDToFightPowerChangeList(curFamily.GetID())
-    PlayerViewCache.OnPlayerLeaveFamily(leavePlayerID)
+    PlayerViewCache.OnPlayerFamilyChange(leavePlayerID, 0, "")
     return
 
 #//////////////////////////////////////////////////////////////
@@ -1802,6 +1819,7 @@
     
     #弹劾信息封包
     SendPackClientImpeachMsg(curPlayer, 0, 0)
+    PlayerTeam.OnTeamMemFamilyRefresh(curPlayer, 0)
     return
 
 #---------------------------------------------------------------------
@@ -2533,8 +2551,6 @@
 #        if useMoney > 0:
 #            #帮会日常维持消耗{%S1%}银两帮会资金
 #            PlayerControl.FamilyNotify(family.GetID(), 'jiazu_lhs_272921', [useMoney])
-        #自动传位
-        __AutoChangeLeader(family)
         
         #通知客户端刷新
         family.Broadcast_FamilyChange()
@@ -2592,6 +2608,13 @@
         
     return
 
+def FamilyOnHour():
+    familyManager = GameWorld.GetFamilyManager()
+    for i in xrange(familyManager.GetCount()):
+        family = familyManager.GetAt(i)
+        #自动传位
+        __AutoChangeLeader(family)
+    return
 #---------------------------------------------------------------------
 ##通知地图服务器, 玩家家族属性刷新
 # @param curFamily 家族实例
@@ -2710,16 +2733,15 @@
         return 0
 
     leaderID = curFamily.GetLeaderID()
-    # 帮主在线
-    if GameWorld.GetPlayerManager().FindPlayerByID(leaderID) != None:
-        return 0
 
     curMember = curFamily.FindMember(leaderID)    
     if curMember == None:
         GameWorld.Log("GetLeaderOfflineTime->FindMember, None;%s" % leaderID)
         return 0
-    
-    offLineTime = GameWorld.ChangeTimeNumToStr(curMember.GetExattr2())
+    offLineTimeNum = curMember.GetExattr2()
+    if not offLineTimeNum:
+        return 0
+    offLineTime = GameWorld.ChangeTimeNumToStr(offLineTimeNum)
     return GameWorld.GetPastHour(offLineTime)
 
 def GetLastOnlineMemberOfflineTime(family):
@@ -2727,17 +2749,14 @@
     offLineTime = 0
     for i in range(0, family.GetCount()):
         member = family.GetAt(i) 
-        playerID = member.GetPlayerID()
-        tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
-        if tagPlayer:
-            return 0
-        if not member.GetExattr2():
+        offLineTimeNum = member.GetExattr2()
+        if not offLineTimeNum:
             #有人在线直接返回
             return 0
         if not offLineTime:
-            offLineTime = member.GetExattr2()
+            offLineTime = offLineTimeNum
         else:
-            offLineTime = max(offLineTime, member.GetExattr2())
+            offLineTime = max(offLineTime, offLineTimeNum)
     if not offLineTime:
         return 0
     offLineTime = GameWorld.ChangeTimeNumToStr(offLineTime)
@@ -2747,7 +2766,7 @@
     '''自动传位'''
     # 获得帮主下线了多久(小时)
     leaderOffLineTime = GetLeaderOfflineTime(curFamily)
-    GameWorld.DebugLog('帮主下线了%s小时'%leaderOffLineTime)
+    GameWorld.DebugLog('帮主下线了%s小时'%leaderOffLineTime, curFamily.GetID())
     if leaderOffLineTime < IpyGameDataPY.GetFuncCfg('AutoChangeLeader'):
         return
     

--
Gitblit v1.8.0