From 7cdd3f4bee1cc16019afc939db48011518ccfb65 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 15 十月 2025 18:02:11 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(公会改名)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py |  482 +++++++++++++++++++++++------------------------------
 1 files changed, 212 insertions(+), 270 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 c5ce267..6ac98f7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -22,17 +22,17 @@
 import NetPackCommon
 import PlayerViewCache
 import ChPyNetSendPack
-import PlayerFamilyTech
 import PlayerFamilyEmblem
-import PlayerFamilyZhenfa
+#import PlayerFamilyZhenfa
 import PlayerFamilyZhenbaoge
 import IPY_PlayerDefine
 import IpyGameDataPY
 import IPY_GameWorld
+import ItemControler
 import GameFuncComm
-import ItemCommon
 import DBDataMgr
 import DirtyList
+import ObjPool
 
 import random
 import time
@@ -53,7 +53,10 @@
 FamilyChangeType_MemFmlvChange, # 成员职位变更 7
 FamilyChangeType_MemLogin, # 成员上线 8
 FamilyChangeType_MemLogout, # 成员离线9
-) = range(10)
+FamilyChangeType_FamilyLVExp, # 仙盟等级经验变更 10
+FamilyChangeType_MemContrib, # 成员贡献变更 11
+FamilyChangeType_OnDay, # 过天 12
+) = range(13)
 
 #仙盟权限
 (
@@ -77,18 +80,25 @@
     familyManager = DBDataMgr.GetFamilyMgr()
     for i in range(0, familyManager.GetCount()):
         family = familyManager.GetAt(i)
+        familyID = family.GetID()
+        
         #珍宝阁
         PlayerFamilyZhenbaoge.OnDay(family)
+        
+        for index in xrange(family.GetCount()):
+            member = family.GetAt(index)
+            # 重置成员日信息
+            member.SetContribDay(0)
+            member.SetDonateCntDay(0)
+            
+        Broadcast_FamilyChange(familyID, FamilyChangeType_OnDay)
         
     return
 
 def PlayerOnDay(curPlayer):
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family):
         return
-    #每日福利奖励
-    Sync_FamilyDayRewardState(curPlayer)
-    __FamilyAffair_Refresh(curPlayer, True)
-    
+    ResetDailyDonateCnt(curPlayer)
     PlayerFamilyZhenbaoge.PlayerOnDay(curPlayer)
     return
 
@@ -97,10 +107,8 @@
         return
     PlayerLoginRefreshFamily(curPlayer, tick)
     Sync_RequestAddFamilyInfo(curPlayer, False)
-    Sync_FamilyDayRewardState(curPlayer)
-    PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)
-    __FamilyAffair_CheckReset(curPlayer)
-    PlayerFamilyZhenfa.OnPlayerLogin(curPlayer)
+    SyncDonateCntInfo(curPlayer)
+    #PlayerFamilyZhenfa.OnPlayerLogin(curPlayer)
     PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
     return
 
@@ -124,9 +132,6 @@
 
 def OnWeekEx(curPlayer):
     #重置
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityAwardRecord, 0)
-    for actionid in ShareDefine.FamilyActiveIDList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0)
     return
 
 def PlayerLoginRefreshFamily(curPlayer, tick):
@@ -150,6 +155,7 @@
     curMember.SetOffTime(0) # 在线0,脱机1,>1离线时间
     curMember.RefreshMember(curPlayer)
     Sync_FamilyInfo(curPlayer)
+    SendFamilyActionInfo(curPlayer, familyID, ShareDefine.Def_ActionType_FamilyData)
     
     #通知招人
     if GetFamilyMemberHasPow(curMember, FamilyPowerID_Call):
@@ -169,6 +175,34 @@
     
     return
 
+def OnMinute():
+    #战力刷新在DBFamily.OnMinute
+    PlayerFamilyEmblem.CheckExpireEmblem()
+    return
+
+def RefreshFamilyMember(curPlayer):
+    ## 玩家成员相关属性变更时同步更新家族成员信息
+    familyID = curPlayer.GetFamilyID()
+    if not familyID:
+        return
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    family = familyMgr.FindFamily(familyID)
+    if not family:
+        return
+    playerID = curPlayer.GetPlayerID()
+    member = family.FindMember(playerID)
+    if not member:
+        return
+    member.RefreshMember(curPlayer)
+    return
+
+def GetRenameTime(dataAction): return dataAction.GetValue1()
+def SetRenameTime(dataAction, setTime): dataAction.SetValue1(setTime)
+def GetFamilyDataAction(familyID):
+    ## 家族额外数据存储的行为数据,可以视为Family公共数据的一个扩展
+    action = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ShareDefine.Def_ActionType_FamilyData)
+    return action.GetOneAction(True)
+
 #// A6 04 创建家族 #tagCMCreateFamily
 #
 #struct    tagCMCreateFamily
@@ -176,11 +210,13 @@
 #    tagHead        Head;
 #    char        Name[33];
 #    WORD        EmblemID; //选择徽章ID,解锁仙盟等级为1级的均为可选ID
+#    char        EmblemWord[3];    //徽章文字
 #};
 def OnCreateFamily(index, clientPack, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     inputName = clientPack.Name
     emblemID = clientPack.EmblemID
+    emblemWord = clientPack.EmblemWord
     
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family):
         return
@@ -218,6 +254,7 @@
         emblemID = random.choice(emblemIDList) # 从默认徽章中随机选择一个
     GameWorld.Log("创建仙盟: familyID=%s,playerID=%s,emblemID=%s" % (newFamilyID, playerID, emblemID))
     curFamily.SetEmblemID(emblemID)
+    curFamily.SetEmblemWord(emblemWord)
     
     #-设置家族成员属性
     DoPlayerJionFamily(curFamily, playerID, curPlayer, IPY_PlayerDefine.fmlLeader)
@@ -331,7 +368,6 @@
     
     #玩家缓存
     #PlayerViewCache.OnPlayerFamilyChange(jionPlayer.GetPlayerID(), curFamily.GetID(), curFamily.GetName())
-    #PlayerTeam.OnTeamMemFamilyRefresh(jionPlayer, curFamily.GetID())
     #SetMemberFightPower(familyMember, PlayerControl.GetFightPower(jionPlayer))
     #GetFamilyMgr().AddFamilyIDToFightPowerChangeList(curFamily.GetID(), jionPlayer.GetPlayerID())
     return
@@ -367,7 +403,6 @@
     playerID = curPlayer.GetPlayerID()
     refreshFmLV = 0
     refreshFamilyLV = 0
-    refreshEmblemID = 0
     refreshFamilyName = ""
     if refreshFamilyID:
         familyMgr = DBDataMgr.GetFamilyMgr()
@@ -375,7 +410,6 @@
         if curFamily:
             refreshFamilyLV = curFamily.GetLV()
             refreshFamilyName = curFamily.GetName()
-            refreshEmblemID = curFamily.GetEmblemID()
             member = curFamily.FindMember(playerID)
             if member:
                 refreshFmLV = member.GetFmLV()
@@ -393,9 +427,6 @@
         curPlayer.SetFamilyName(refreshFamilyName)
         curPlayer.Notify_FamilyNameRefresh() #//04 36    周围玩家家族名刷新#tagPlayerFamilyNameRefresh
         
-    if PlayerControl.GetFamilyEmblemID(curPlayer) != refreshEmblemID:
-        PlayerControl.SetFamilyEmblemID(curPlayer, refreshEmblemID)
-            
     if lastFmLV != refreshFmLV:
         PlayerControl.SetFamilyMemberLV(curPlayer, refreshFmLV)
         
@@ -431,12 +462,6 @@
     familyMgr = DBDataMgr.GetFamilyMgr()
     familyMgr.DelPlayerReqJoinFamilyIDAll(curPlayer.GetPlayerID())
     Sync_RequestAddFamilyInfo(curPlayer)
-    __FamilyAffair_CheckReset(curPlayer)
-    PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)
-    #GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)
-    #GameLogic_FamilyBoss.OnEnterFamily(curPlayer)
-    #PlayerFamilyRedPacket.CreatCacheRedPacktet(curPlayer)
-    #PlayerFamilyZhenfa.OnEnterFamily(curPlayer)
     return
 
 def __OnLeaveFamily(curPlayer, tick):
@@ -485,6 +510,7 @@
     clientPack.JoinLVMin = curFamily.GetJoinLVMin()
     clientPack.ServerID = curFamily.GetServerID()
     clientPack.EmblemID = curFamily.GetEmblemID()
+    clientPack.EmblemWord = curFamily.GetEmblemWord()
     clientPack.FightPower = curFamily.GetFightPower()
     clientPack.FightPowerEx = curFamily.GetFightPowerEx()
     clientPack.Broadcast = curFamily.GetBroadcast()
@@ -503,12 +529,15 @@
         memInfo.RealmLV = member.GetRealmLV()
         memInfo.Face = member.GetFace()
         memInfo.FacePic = member.GetFacePic()
+        memInfo.TitleID = member.GetTitleID()
         memInfo.FightPower = member.GetFightPower()
         memInfo.FightPowerEx = member.GetFightPowerEx()
         memInfo.FmLV = member.GetFmLV()
         memInfo.ServerID = member.GetServerID()
         memInfo.ContribTotal = member.GetContribTotal()
-        memInfo.ContribWeek = member.GetContribWeek()
+        memInfo.ContribDay = member.GetContribDay()
+        memInfo.DonateCntTotal = member.GetDonateCntTotal()
+        memInfo.DonateCntDay = member.GetDonateCntDay()
         memInfo.OffTime = member.GetOffTime()
         clientPack.MemberList.append(memInfo)
     clientPack.MemberCount = len(clientPack.MemberList)
@@ -771,6 +800,7 @@
             reqInfo.RealmLV = viewCache.GetRealmLV()
             reqInfo.Face = viewCache.GetFace()
             reqInfo.FacePic = viewCache.GetFacePic()
+            reqInfo.TitleID = viewCache.GetTitleID()
             reqInfo.FightPower = viewCache.GetFightPower()
             reqInfo.FightPowerEx = viewCache.GetFightPowerEx()
             reqInfo.ServerID = viewCache.GetServerID()
@@ -942,11 +972,13 @@
 #{
 #    tagHead        Head;
 #    BYTE        EmblemID;    // 更换的徽章ID
+#    char        EmblemWord[3];    // 徽章文字
 #};
 def OnChangeFamilyEmblem(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     changeEmblemID = clientData.EmblemID
-    PlayerFamilyEmblem.OnChangeFamilyEmblem(curPlayer, changeEmblemID)
+    emblemWord = clientData.EmblemWord
+    PlayerFamilyEmblem.OnChangeFamilyEmblem(curPlayer, changeEmblemID, emblemWord)
     return
 
 #// A6 25 修改家族成员职位 #tagCMChangeFamilyMemLV
@@ -1215,7 +1247,7 @@
 def UpdateFamilyName(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     newName = clientData.NewName
-    itemIndex = clientData.ItemIndex
+    #itemIndex = clientData.ItemIndex
     
     playerID = curPlayer.GetPlayerID()
     familyID = curPlayer.GetFamilyID()
@@ -1233,18 +1265,24 @@
         GameWorld.DebugLog("非盟主不可改名!", playerID)
         return
     
+    cdHours = IpyGameDataPY.GetFuncCfg("FamilyRename", 2)
+    if cdHours:
+        cdSeconds = cdHours * 3600
+        curTime = int(time.time())
+        dataAction = GetFamilyDataAction(familyID)
+        lastRenameTime = GetRenameTime(dataAction)
+        if lastRenameTime and (curTime - lastRenameTime) < cdSeconds:
+            GameWorld.DebugLog("仙盟改名CD中! lastRenameTime=%s,cdHours=%s" % (GameWorld.ChangeTimeNumToStr(lastRenameTime), cdHours))
+            return
+        
     familyName = CheckInputFamilyName(curPlayer, newName)
     if not familyName:
         return
     
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    curItem = itemPack.GetAt(itemIndex)
-    if not ItemCommon.CheckItemCanUse(curItem) or curItem.GetType() != ChConfig.Def_ItemType_ChangeFamilyName:
-        GameWorld.DebugLog("没有仙盟改名道具! itemIndex=%s" % itemIndex, playerID)
+    moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("FamilyRename", 1)
+    if moneyType and moneyValue and not PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "FamilyRename"):
         return
-    ItemCommon.DelItem(curPlayer, curItem, 1, True, 'UpdateFamilyName')
     
-    #oldName = curFamily.GetName()
     family.SetName(familyName)
     
     infoPack = GetPack_FamilyInfo(familyID)
@@ -1257,10 +1295,11 @@
             continue
         Sync_FamilyInfo(player, infoPack)
         player.SetFamilyName(familyName)
-        player.Notify_FamilyNameRefresh() #//04 36    周围玩家家族名刷新#tagPlayerFamilyNameRefresh
+        #player.Notify_FamilyNameRefresh() #//04 36    周围玩家家族名刷新#tagPlayerFamilyNameRefresh
         
-    #PlayerCompensation.SendMailByKey('FamilyNameChange', memberIDList, [], [oldName, familyName])    
-    #PlayerControl.WorldNotify(0, 'Family_ChangeName', [oldName, familyName])
+    if cdHours:
+        SetRenameTime(dataAction, curTime)
+        SendFamilyActionInfo(None, familyID, ShareDefine.Def_ActionType_FamilyData)
     return
 
 #// A6 20 搜索家族列表 #tagCMViewFamilyPage
@@ -1310,8 +1349,11 @@
         family = familyMgr.GetAt(index)
         if not family:
             continue
-        if msg and msg not in family.GetName():
-            continue
+        if msg:
+            if msg in family.GetName() or msg == str(family.GetID()):
+                pass
+            else:
+                continue
         familyView = ChPyNetSendPack.tagMCFamilyView()
         familyView.FamilyID = family.GetID()
         familyView.FamilyName = family.GetName()
@@ -1325,6 +1367,7 @@
         familyView.JoinLVMin = family.GetJoinLVMin()
         familyView.ServerID = family.GetServerID()
         familyView.EmblemID = family.GetEmblemID()
+        familyView.EmblemWord = family.GetEmblemWord()
         familyView.FightPower = family.GetFightPower()
         familyView.FightPowerEx = family.GetFightPowerEx()
         familyView.MemberCount = family.GetCount()
@@ -1344,20 +1387,138 @@
 #    BYTE        DonateType;    // 捐献类型
 #};
 def OnFamilyMoneyDonate(index, clientData, tick):
-    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    #DonateType = clientData.DonateType
-    #playerID = curPlayer.GetPlayerID()
-    # 先屏蔽,等功能定了再改
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    donateType = clientData.DonateType
+    playerID = curPlayer.GetPlayerID()
+    familyID = curPlayer.GetFamilyID()
+    if familyID <= 0:
+        return
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    curFamily = familyMgr.FindFamily(familyID)
+    if not curFamily:
+        return
+    curMember = curFamily.FindMember(playerID)
+    if not curMember:
+        return
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("FamilyDonate", donateType)
+    if not ipyData:
+        return
+    dailyCntMax = ipyData.GetDailyCnt()
+    donateCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType)
+    if donateCnt >= dailyCntMax:
+        GameWorld.DebugLog("今日捐献次数已达上限! donateType=%s,donateCnt=%s >= %s" % (donateType, donateCnt, dailyCntMax), playerID)
+        return
+    
+    moneyType = ipyData.GetMoneyType()
+    moneyValue = ipyData.GetMoneyValue()
+    if not moneyType or not moneyValue:
+        return
+    if not PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "FamilyMoneyDonate"):
+        return
+    
+    awardItemList = ipyData.GetAwardItemList()
+    donateCnt += 1
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType, donateCnt)
+    SyncDonateCntInfo(curPlayer)
+    # 增加成员捐献次数记录
+    memDonateCntDay = curMember.GetDonateCntDay() + 1
+    memDonateCntTotal = min(curMember.GetDonateCntTotal() + 1, ChConfig.Def_UpperLimit_DWord)
+    curMember.SetDonateCntDay(memDonateCntDay)
+    curMember.SetDonateCntTotal(memDonateCntTotal)
+    GameWorld.DebugLog("家族捐献: donateType=%s,donateCnt=%s,%s,memDonateCntDay=%s,memDonateCntDay=%s" 
+                       % (donateType, donateCnt, awardItemList, memDonateCntDay, memDonateCntTotal), playerID)
+    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
     return
 
+def ResetDailyDonateCnt(curPlayer):
+    isReset = False
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetFamilyDonateCount()):
+        ipyData = ipyDataMgr.GetFamilyDonateByIndex(index)
+        donateType = ipyData.GetDonateType()
+        donateCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType)
+        if donateCnt:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType, 0)
+            isReset = True
+    if isReset:
+        SyncDonateCntInfo(curPlayer)
+    return
 
-#---------------------------------------------------------------------
-def AddPlayerFamilyActiveValue(curPlayer, addValue, sendPackGameServer = False, reason = 0, isSysMsg=False):
-    # 多个地方用到,先保留,之后删除统一修改
+def SyncDonateCntInfo(curPlayer):
+    donateCntList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetFamilyDonateCount()):
+        ipyData = ipyDataMgr.GetFamilyDonateByIndex(index)
+        donateType = ipyData.GetDonateType()
+        donateCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateCnt % donateType)
+        donateCntList.append(donateCnt)
+    if not donateCntList:
+        return
+    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCDonateCntInfo)
+    clientPack.DonateCntList = donateCntList
+    clientPack.Count = len(clientPack.DonateCntList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+
+def AddFamilyExp(curPlayer, addExp):
+    ## 增加玩家家族经验
+    playerID = curPlayer.GetPlayerID()
+    familyID = curPlayer.GetFamilyID()
+    if familyID <= 0:
+        return
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    curFamily = familyMgr.FindFamily(familyID)
+    if not curFamily:
+        return
+    curLV = curFamily.GetLV()
+    curExp = curFamily.GetExp()
+    
+    updLV = curLV
+    updExp = curExp + addExp
+    GameWorld.DebugLog("增加仙盟经验: curLV=%s,curExp=%s,addExp=%s,updExp=%s" % (curLV, curExp, addExp, updExp), playerID)
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("Family", curLV)
+    lvUPExp = ipyData.GetNeedExp()
+    while lvUPExp and updExp >= lvUPExp:
+        ipyData = IpyGameDataPY.GetIpyGameDataNotLog("Family", updLV + 1)
+        if not ipyData:
+            break
+        updLV += 1
+        updExp -= lvUPExp
+        lvUPExp = ipyData.GetNeedExp()
+        GameWorld.DebugLog("    仙盟升级: updLV=%s,updExp=%s,lvUPExp=%s" % (updLV, updExp, lvUPExp), playerID)
+        
+    curFamily.SetLV(updLV)
+    curFamily.SetExp(updExp)
+    
+    Sync_FamilyInfo(curPlayer)
+    Broadcast_FamilyChange(familyID, FamilyChangeType_FamilyLVExp, excludeIDList=[playerID])
     return True
-def SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyHornor = 0, addFamilyMoney = 0, addFamilyActiveValue = 0, resion=0):
-    return
-def SendPack_GameServer_AddFamilyDetailEx(curPlayer, addPlayerActiveValue, addFamilyMoney = 0, addFamilyHornor = 0, resion=0):
+
+def AddFamilyContrib(curPlayer, addContribValue):
+    ## 增加玩家累计家族贡献
+    
+    playerID = curPlayer.GetPlayerID()
+    familyID = curPlayer.GetFamilyID()
+    if familyID <= 0:
+        return
+    familyMgr = DBDataMgr.GetFamilyMgr()
+    curFamily = familyMgr.FindFamily(familyID)
+    if not curFamily:
+        return
+    curMember = curFamily.FindMember(playerID)
+    if not curMember:
+        return
+    
+    contribDay = curMember.GetContribDay() + addContribValue
+    contribTotal = min(curMember.GetContribTotal() + addContribValue, ChConfig.Def_UpperLimit_DWord)
+    curMember.SetContribDay(contribDay)
+    curMember.SetContribTotal(contribTotal)
+    GameWorld.DebugLog("增加成员贡献: familyID=%s,addContribValue=%s,contribDay=%s,contribTotal=%s" % (familyID, addContribValue, contribDay, contribTotal), playerID)
+    
+    Sync_FamilyInfo(curPlayer)
+    Broadcast_FamilyChange(familyID, FamilyChangeType_MemContrib, excludeIDList=[playerID])
     return
 
 ## ------------------------------------------------------------------------------------------------
@@ -1458,222 +1619,3 @@
     Broadcast_FamilyPack(familyID, clientPack)
     return
 
-def GetFamilyDayAward(curPlayer):
-    ##领取仙盟每日奖励 2小时脱机挂时间
-    return
-
-def Sync_FamilyDayRewardState(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCFamilyDayAward()
-    clientPack.GetState = 0
-    clientPack.MoneyDonateCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDonateRecord)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
-
-def AddFamilyActivity(curPlayer, actionid, addCnt=1):
-    return
-
-
-##--------------------------------------- 仙盟事务 --------------------------------------------------
-AffairState_None = 0 # 无
-AffairState_Underway = 1 # 进行中
-AffairState_Finish = 2 # 已完成
-
-#// A6 13 家族事务操作 #tagCMFamilyAffairOP
-#
-#struct     tagCMFamilyAffairOP
-#{
-#    tagHead        Head;
-#    BYTE        OPType;    // 操作类型:1-刷新事务;2-开始事务;3-领取事务奖励;
-#    WORD        AffairID;    // 事务ID,可选
-#};
-def OnFamilyAffairOP(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    opType = clientData.OPType
-    affairID = clientData.AffairID
-    
-    if opType == 1:
-        __FamilyAffair_Refresh(curPlayer)
-    elif opType == 2:
-        __FamilyAffair_Start(curPlayer, affairID)
-    elif opType == 3:
-        __FamilyAffair_GetAward(curPlayer, affairID)        
-    return
-
-def __FamilyAffair_CheckReset(curPlayer):
-    ## 检查任务重置,登录,进入仙盟触发
-    info = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairInfo % 1)
-    if not info:
-        # 任务1还没分配,默认强制重置
-        __FamilyAffair_Refresh(curPlayer, True)
-    else:
-        SyncFamilyAffairInfo(curPlayer)
-    return
-
-def __FamilyAffair_Refresh(curPlayer, isReset=False):
-    ## 刷新事务
-    
-    playerID = curPlayer.GetPlayerID()
-    moneyType, moneyValue = 0, 0    
-    dayRefreshFreeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairRefreshFree)
-    if not isReset:
-        freeCountMax = IpyGameDataPY.GetFuncCfg("FamilyAffair", 2)
-        if freeCountMax and dayRefreshFreeCount >= freeCountMax:
-            moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 3)
-            if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
-                return
-            
-    sendMailAffairList = []
-    refreshAffairIDList = []
-    affairCountMax = IpyGameDataPY.GetFuncCfg("FamilyAffair", 1)
-    affairStarDict = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 4)
-    maxStar = 0
-    starWeightList = []
-    for starStr, starInfo in affairStarDict.items():
-        star = int(starStr)
-        if star > maxStar:
-            maxStar = star
-        starWeightList.append([starInfo[0], star])
-        
-    for affairID in range(1, affairCountMax + 1):
-        star, state = __GetAffairInfo(curPlayer, affairID)
-        if isReset:
-            # 重置时还在进行中的直接发奖励
-            if state == AffairState_Underway:
-                sendMailAffairList.append([affairID, star])
-            refreshAffairIDList.append(affairID)
-        else:
-            # 非重置只处理没有状态非最高星的
-            if state == AffairState_None and star < maxStar:
-                refreshAffairIDList.append(affairID)
-                
-    GameWorld.DebugLog("刷新事务: isReset=%s,moneyType=%s,moneyValue=%s,dayRefreshFreeCount=%s" 
-                       % (isReset, moneyType, moneyValue, dayRefreshFreeCount), playerID)
-    GameWorld.DebugLog("    sendMailAffairList=%s" % sendMailAffairList, playerID)
-    
-    for mailInfo in sendMailAffairList:
-        affairID, star = mailInfo
-        if str(star) not in affairStarDict:
-            continue
-        paramList = [affairID, star]
-        addItemList = affairStarDict[str(star)][2]
-        PlayerControl.SendMailByKey("FamilyAffairAward", [playerID], addItemList, paramList)
-        
-    if isReset:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairRefreshFree, 0)
-        for affairID in range(1, affairCountMax + 1):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairInfo % affairID, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID, 0)
-    else:
-        if moneyType and moneyValue:
-            PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "FamilyAffair")
-        else:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairRefreshFree, dayRefreshFreeCount + 1)
-            
-    GameWorld.DebugLog("    starWeightList=%s" % starWeightList, playerID)
-    GameWorld.DebugLog("    refreshAffairIDList=%s" % refreshAffairIDList, playerID)
-    for affairID in refreshAffairIDList:
-        star = GameWorld.GetResultByWeightList(starWeightList, 1)
-        __SetAffairInfo(curPlayer, affairID, star, AffairState_None)
-        GameWorld.DebugLog("    随机事务:affairID=%s,star=%s" % (affairID, star), playerID)
-        
-    SyncFamilyAffairInfo(curPlayer)
-    return
-
-def __FamilyAffair_Start(curPlayer, affairID):
-    ## 开始事务
-    playerID = curPlayer.GetPlayerID()
-    star, state = __GetAffairInfo(curPlayer, affairID)
-    if not star:
-        return
-    if state != AffairState_None:
-        GameWorld.DebugLog("仙盟事务已经进行中或已完成,无法开始: affairID=%s,star=%s,state=%s" % (affairID, star, state), playerID)
-        return
-    startTime = int(time.time())
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID, startTime)
-    __SetAffairInfo(curPlayer, affairID, star, AffairState_Underway)
-    GameWorld.DebugLog("仙盟事务开始: affairID=%s,star=%s,startTime=%s" % (affairID, star, startTime), playerID)
-    SyncFamilyAffairInfo(curPlayer, affairID)
-    return
-
-def __FamilyAffair_GetAward(curPlayer, affairID):
-    ## 领取事务奖励
-    playerID = curPlayer.GetPlayerID()
-    curTime = int(time.time())
-    affairStarDict = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 4)
-    star, state = __GetAffairInfo(curPlayer, affairID)
-    if state != AffairState_Underway:
-        GameWorld.DebugLog("仙盟事务状态非进行中无法领取: affairID=%s,star=%s,state=%s" % (affairID, star, state), playerID)
-        SyncFamilyAffairInfo(curPlayer, affairID)
-        return
-    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID)
-    remainDuration = __GetAffairRemainDuration(curPlayer, affairID, star, curTime, affairStarDict)
-    if remainDuration != 0:
-        GameWorld.DebugLog("仙盟事务当前剩余时长未完成: affairID=%s,remainDuration=%s,startTime=%s" 
-                           % (affairID, remainDuration, startTime), playerID)
-        SyncFamilyAffairInfo(curPlayer, affairID)
-        return
-    if str(star) not in affairStarDict:
-        return
-    addItemList = affairStarDict[str(star)][2]
-    if not ItemCommon.GiveAwardItem(curPlayer, addItemList):
-        return
-    __SetAffairInfo(curPlayer, affairID, star, AffairState_Finish)
-    GameWorld.DebugLog("仙盟事务领奖: affairID=%s,star=%s" % (affairID, star), playerID)
-    SyncFamilyAffairInfo(curPlayer, affairID)
-    return
-
-def __GetAffairInfo(curPlayer, affairID):
-    affairInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairInfo % affairID)
-    star, state = affairInfo / 10, affairInfo % 10
-    return star, state
-def __SetAffairInfo(curPlayer, affairID, star, state):
-    info = star * 10 + state
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairInfo % affairID, info)
-    return
-def __GetAffairRemainDuration(curPlayer, affairID, star, curTime, affairStarDict):
-    ## -1-未开始;>=0-剩余时长
-    startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID)
-    if not startTime:
-        return -1
-    starInfo = affairStarDict.get(str(star), [])
-    needDuration = starInfo[1] if len(starInfo) > 1 else 0
-    # 可扩展减时长属性
-    speedPer = 0#PlayerControl.GetAffairSpeedPer(curPlayer)
-    if speedPer:
-        needDuration = int(needDuration * max(10000 - speedPer, 0) / 10000.0)
-        #GameWorld.DebugLog("事务加速: needDuration=%s,speedPer=%s" % (needDuration, speedPer), curPlayer.GetPlayerID())
-        
-    remainDuration = max(needDuration - (curTime - startTime), 0)
-    return remainDuration
-
-def SyncFamilyAffairInfo(curPlayer, affairID=None):
-    if affairID == None:
-        affairIDList = []
-        affairCountMax = IpyGameDataPY.GetFuncCfg("FamilyAffair", 1)
-        for affairID in range(1, affairCountMax + 1):
-            affairIDList.append(affairID)
-    else:
-        affairIDList = [affairID]
-        
-    curTime = int(time.time())
-    affairStarDict = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 4)
-    affairInfoList = []
-    for affairID in affairIDList:
-        star, state = __GetAffairInfo(curPlayer, affairID)
-        remainDuration = __GetAffairRemainDuration(curPlayer, affairID, star, curTime, affairStarDict)
-        affairInfo = ChPyNetSendPack.tagMCFamilyAffair()
-        affairInfo.AffairID = affairID
-        affairInfo.Star = star
-        affairInfo.State = state
-        affairInfo.RemainDuration = max(0, remainDuration)
-        affairInfoList.append(affairInfo)
-        
-    if not affairInfoList:
-        return
-    clientPack = ChPyNetSendPack.tagMCFamilyAffairInfo()
-    clientPack.Clear()
-    clientPack.RefreshFreeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairRefreshFree)
-    clientPack.AffairInfoList = affairInfoList
-    clientPack.Count = len(clientPack.AffairInfoList)
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return

--
Gitblit v1.8.0