From ff401cef9cd3ca3c0c76542cbd2a35207cb9b83a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 24 十月 2025 14:01:52 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(捐赠A801补充EventName)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 99 ++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 77 insertions(+), 22 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index 2c45798..8cabe1c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -23,7 +23,6 @@
import PlayerViewCache
import ChPyNetSendPack
import PlayerFamilyEmblem
-#import PlayerFamilyZhenfa
import PlayerFamilyZhenbaoge
import IPY_PlayerDefine
import IpyGameDataPY
@@ -108,7 +107,6 @@
PlayerLoginRefreshFamily(curPlayer, tick)
Sync_RequestAddFamilyInfo(curPlayer, False)
SyncDonateCntInfo(curPlayer)
- #PlayerFamilyZhenfa.OnPlayerLogin(curPlayer)
PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
return
@@ -126,7 +124,7 @@
return
curMember.SetOffTime(int(time.time()))
#XW_JZ_LeaguerLeaveline <n color="0,190,255">{%S1%}</n><n color="255,255,0">下线了!</n> 25 - -
- NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerLeaveline", [curPlayer.GetPlayerName()])
+ #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerLeaveline", [curPlayer.GetPlayerName()])
Broadcast_FamilyChange(familyID, FamilyChangeType_MemLogout, excludeIDList=[playerID])
return
@@ -162,7 +160,7 @@
NetPackCommon.SendFakePack(curPlayer, GetPack_FamilyReqJoinInfo(familyID))
#XW_JZ_LeaguerOnline <n color="0,190,255">{%S1%}</n><n color="255,255,0">上线了!</n> 25 - -
- NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerOnline", [curPlayer.GetName()], [playerID])
+ #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaguerOnline", [curPlayer.GetName()], [playerID])
Broadcast_FamilyChange(familyID, FamilyChangeType_MemLogin, excludeIDList=[playerID])
# 盟主上线处理
@@ -279,17 +277,17 @@
if DirtyList.IsWordForbidden(familyName):
#XW_JZ_Family_NameNoLegality 对不起,家族名称中含有非法字符
- PlayerControl.NotifyCode(curPlayer, "XW_JZ_Family_NameNoLegality")
+ PlayerControl.NotifyCode(curPlayer, "NameSensitive")
return
if len(familyName) <= 0 or len(familyName) > Def_CreatFamily_MaxStr:
- PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_980181", [Def_CreatFamily_MaxStr / 2, Def_CreatFamily_MaxStr])
+ PlayerControl.NotifyCode(curPlayer, "NameLenLimit", [Def_CreatFamily_MaxStr / 3, Def_CreatFamily_MaxStr])
return
familyMgr = DBDataMgr.GetFamilyMgr()
if familyMgr.FindFamilyByName(fullFamilyName):
#XW_JZ_EstablishErr_Name <n color="255,255,0">对不起,您输入的家族名已存在,建立家族失败!</n> 25 - -
- PlayerControl.NotifyCode(curPlayer, "XW_JZ_EstablishErr_Name")
+ PlayerControl.NotifyCode(curPlayer, "NameExists")
return
return fullFamilyName
@@ -317,7 +315,7 @@
maxLen = IpyGameDataPY.GetFuncCfg("FamilyNameFormat", 2)
if len(fullName) > maxLen:
GameWorld.ErrLog("仙盟全名 familyName=%s,全名=%s len=%s > %s, check FamilyNameFormat.txt" % (familyName, fullName, len(fullName), maxLen))
- PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_980181", [maxLen / 2, maxLen])
+ PlayerControl.NotifyCode(curPlayer, "NameLenLimit", [maxLen / 3, maxLen])
return ""
return fullName
@@ -357,7 +355,7 @@
if broadcastFamilyChange:
Broadcast_FamilyChange(familyID, FamilyChangeType_MemJoin, excludeIDList=[playerID])
#通知所有家族成员, 这个人加入了家族
- NotifyAllFamilyMemberMsg(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID])
+ #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID])
if jionPlayer:
PlayerControl.NotifyCode(jionPlayer, 'XW_JZ_EnterFamilyInfo', [family.GetName()])
@@ -394,9 +392,10 @@
setFunc(value)
return True
-def MapServer_FamilyRefresh(curPlayer, refreshFamilyID):
+def MapServer_FamilyRefresh(curPlayer, refreshFamilyID, isVoluntarily=0):
''' 相当于GameServer调用 curPlayer.MapServer_FamilyRefresh()
@param familyID: 玩家更新的familyID
+ @param isVoluntarily: 是否自愿离开的,仅离开刷新时有效
'''
tick = GameWorld.GetGameWorld().GetTick()
@@ -443,7 +442,7 @@
if lastFamilyID != 0 and curPlayer.GetFamilyID() == 0:
#玩家离开家族
- __OnLeaveFamily(curPlayer, tick)
+ __OnLeaveFamily(curPlayer, isVoluntarily, tick)
elif lastFamilyID == 0 and curPlayer.GetFamilyID() != 0:
#刚进家族并为族长,触发建家族事件
@@ -464,7 +463,7 @@
Sync_RequestAddFamilyInfo(curPlayer)
return
-def __OnLeaveFamily(curPlayer, tick):
+def __OnLeaveFamily(curPlayer, isVoluntarily, tick):
## 退出家族触发事件
#---清空家族相关信息---
curPlayer.SetPerExp(0)
@@ -473,7 +472,29 @@
curPlayer.SetLastWeekFamilyActiveValue(0)
curPlayer.SetFamilyLV(0)
PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time()))
-
+ leaveCnt, kickedCnt, _ = PlayerControl.GetLeaveFamilyInfo(curPlayer)
+ GameWorld.DebugLog("__OnLeaveFamily: isVoluntarily=%s,leaveCnt=%s,kickedCnt=%s" % (isVoluntarily, leaveCnt, kickedCnt))
+ delMoneyType, delMoneyPer = IpyGameDataPY.GetFuncCfg("FamilyLeave", 3), 0
+ if isVoluntarily:
+ delMoneyPerList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 4)
+ if delMoneyPerList:
+ delMoneyPer = delMoneyPerList[leaveCnt] if len(delMoneyPerList) > leaveCnt else delMoneyPerList[-1]
+
+ leaveCnt += 1
+ GameWorld.DebugLog(" 增加主动离开次数: leaveCnt=%s" % (leaveCnt))
+ else:
+ delMoneyPerList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 5)
+ if delMoneyPerList:
+ delMoneyPer = delMoneyPerList[kickedCnt] if len(delMoneyPerList) > kickedCnt else delMoneyPerList[-1]
+
+ kickedCnt += 1
+ GameWorld.DebugLog(" 增加被踢离开次数: kickedCnt=%s" % (kickedCnt))
+ PlayerControl.SetLeaveFamilyInfo(curPlayer, leaveCnt, kickedCnt, isVoluntarily)
+ if delMoneyType and delMoneyPer:
+ nowMoney = PlayerControl.GetMoney(curPlayer, delMoneyType)
+ delMoney = int(nowMoney * delMoneyPer / 100.0)
+ GameWorld.DebugLog(" 扣除货币: delMoneyType=%s,delMoneyPer=%s,nowMoney=%s,delMoney=%s" % (delMoneyType, delMoneyPer, nowMoney, delMoney))
+ PlayerControl.PayMoney(curPlayer, delMoneyType, delMoney, "LeaveFamily")
FBLogic.OnLeaveFamily(curPlayer, tick)
return
@@ -645,12 +666,43 @@
return
+def CheckInJoinCD(curPlayer):
+ ## 检查是否加入仙盟CD中
+ leaveFamilyTime = PlayerControl.GetLeaveFamilyTimeEx(curPlayer)
+ if not leaveFamilyTime:
+ return False
+
+ leaveCnt, kickedCnt, lastVoluntarily = PlayerControl.GetLeaveFamilyInfo(curPlayer)
+ joinCDMinute = 0
+ if lastVoluntarily:
+ if leaveCnt <= 0:
+ return False
+ joinCDMinuteList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 1)
+ if joinCDMinuteList:
+ joinCDMinute = joinCDMinuteList[leaveCnt - 1] if len(joinCDMinuteList) >= leaveCnt else joinCDMinuteList[-1]
+ else:
+ if kickedCnt <= 0:
+ return False
+ joinCDMinuteList = IpyGameDataPY.GetFuncEvalCfg("FamilyLeave", 2)
+ if joinCDMinuteList:
+ joinCDMinute = joinCDMinuteList[kickedCnt - 1] if len(joinCDMinuteList) >= kickedCnt else joinCDMinuteList[-1]
+ if joinCDMinute:
+ cdTimes = joinCDMinute * 60
+ passTimes = int(time.time()) - leaveFamilyTime
+ if passTimes < cdTimes:
+ GameWorld.DebugLog("加入仙盟CD中: leaveCnt=%s,kickedCnt=%s,lastVoluntarily=%s,leaveFamilyTime=%s(%s),passTimes=%s < %s"
+ % (leaveCnt, kickedCnt, lastVoluntarily, leaveFamilyTime, GameWorld.ChangeTimeNumToStr(leaveFamilyTime), passTimes, cdTimes))
+ return True
+ return False
+
def AutoJoinFamily(curPlayer):
if curPlayer.GetFamilyID():
return
playerID = curPlayer.GetPlayerID()
- playerLV = curPlayer.GetLV()
- GameWorld.DebugLog("玩家一键自动加入家族! playerLV=%s" % playerLV, playerID)
+ realmLV = curPlayer.GetOfficialRank()
+ GameWorld.DebugLog("玩家一键自动加入家族! realmLV=%s" % realmLV, playerID)
+ if CheckInJoinCD(curPlayer):
+ return
familyMgr = DBDataMgr.GetFamilyMgr()
indexList = range(familyMgr.GetCount())
@@ -661,8 +713,8 @@
continue
familyID = family.GetID()
lvMin = family.GetJoinLVMin()
- if lvMin and playerLV < lvMin:
- GameWorld.DebugLog(" 等级不足的不处理! familyID=%s,lvMin=%s" % (familyID, lvMin), playerID)
+ if lvMin and realmLV < lvMin:
+ GameWorld.DebugLog(" 官职不足的不处理! familyID=%s,lvMin=%s" % (familyID, lvMin), playerID)
continue
if family.GetJoinReview():
GameWorld.DebugLog(" 需要审核的不处理! familyID=%s" % familyID, playerID)
@@ -678,6 +730,7 @@
# 可再扩展自动请求,暂时不处理
GameWorld.DebugLog("没有可自动进入的仙盟!")
+ PlayerControl.NotifyCode(curPlayer, "QuickEnterFamilyFail")
return
def GetFamilySetting(familyLV, fieldName):
@@ -694,6 +747,8 @@
def RequestJoinTagFamily(curPlayer, familyID):
## 申请加入
+ if CheckInJoinCD(curPlayer):
+ return
playerID = curPlayer.GetPlayerID()
if curPlayer.GetFamilyID():
GameWorld.DebugLog('已经有仙盟不能再申请加入! familyID=%s' % curPlayer.GetFamilyID(), playerID)
@@ -714,8 +769,8 @@
return
lvMin = tagFamily.GetJoinLVMin()
- if curPlayer.GetLV() < lvMin:
- GameWorld.DebugLog('等级未达到该仙盟加入最低等级限制! lv=%s < %s' % (curPlayer.GetLV(), lvMin), playerID)
+ if curPlayer.GetOfficialRank() < lvMin:
+ GameWorld.DebugLog('官职未达到该仙盟加入最低限制! realmLV=%s < %s' % (curPlayer.GetOfficialRank(), lvMin), playerID)
return
# 需要审核,满员后端不限制申请,由前端自行决定是否可申请
@@ -912,7 +967,7 @@
def OnChangeFamilyJoin(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
joinReview = clientData.JoinReview
- joinLVMin = clientData.JoinLVMin
+ joinLVMin = clientData.JoinLVMin # 官职
playerID = curPlayer.GetPlayerID()
familyID = curPlayer.GetFamilyID()
@@ -1164,7 +1219,7 @@
#XW_JZ_LeaveFamily <n color="0,190,255">{%S1%}</n><n color="255,255,0">退出了家族!</n> 25 - -
NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaveFamily", [curPlayer.GetName()])
- MapServer_FamilyRefresh(curPlayer, 0)
+ MapServer_FamilyRefresh(curPlayer, 0, 1)
if family.GetCount() == 0:
#玩家离开后, 家族没有人了 , 删除这个家族
@@ -1429,7 +1484,7 @@
curMember.SetDonateCntTotal(memDonateCntTotal)
GameWorld.DebugLog("家族捐献: donateType=%s,donateCnt=%s,%s,memDonateCntDay=%s,memDonateCntDay=%s"
% (donateType, donateCnt, awardItemList, memDonateCntDay, memDonateCntTotal), playerID)
- ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["FamilyMoneyDonate", False, {}])
return
def ResetDailyDonateCnt(curPlayer):
--
Gitblit v1.8.0