hxp
2023-10-12 7bd89df4994934b9a5810e6b62383e6773b8339b
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -31,6 +31,10 @@
import PlayerFamilyTech
import PlayerFamilyRedPacket
import PlayerFamilyZhenfa
import PlayerTongTianLing
import PlayerWeekParty
import PlayerActivity
import ItemControler
import SkillCommon
import BuffSkill
import ItemCommon
@@ -1184,3 +1188,113 @@
    return
##--------------------------------------------------------------------------------------------------
##--------------------------------------- 仙盟传功 --------------------------------------------------
#// A6 15 传功操作 #tagCMChuangongOP
#
#struct    tagCMChuangongOP
#{
#    tagHead        Head;
#    BYTE        OPType;        // 操作类型:1-邀请;2-回应;3-领奖;
#    DWORD        PlayerID;        // 目标玩家ID;回应时为邀请方玩家ID
#    BYTE        OPData;        // 操作数据,可选:回应时为是否同意
#};
def OnChuangongOP(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    opType = clientData.OPType
    tagPlayerID = clientData.PlayerID
    opData = clientData.OPData
    if tagPlayerID and curPlayer.GetPlayerID() == tagPlayerID:
        GameWorld.DebugLog("不能自己传功")
        return
    if opType == 1:
        __Chuangong_Invite(curPlayer, tagPlayerID)
    elif opType == 2:
        __Chuangong_Response(curPlayer, tagPlayerID, opData)
    elif opType == 3:
        __Chuangong_GetAward(curPlayer)
    return
def SendGameServer_FamilyChuangong(curPlayer, msgType, msgData):
    playerID = curPlayer.GetPlayerID()
    GameWorld.DebugLog("传功同步GameServer: msgType=%s,%s" % (msgType, msgData), playerID)
    msgInfo = str([msgType, msgData])
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "FamilyChuangong", msgInfo, len(msgInfo))
    return
def __CheckCanChuangong(curPlayer):
    playerID = curPlayer.GetPlayerID()
    remainCnt = PlayerActivity.GetDailyActionrRemainCnt(curPlayer, ShareDefine.DailyActionID_FamilyChuanGong)
    if remainCnt <= 0:
        GameWorld.DebugLog("没有传功次数了", playerID)
        return
    openServerDayLimit = IpyGameDataPY.GetFuncCfg("FamilyChuangong", 1)
    if openServerDayLimit:
        openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
        if openServerDay > openServerDayLimit:
            GameWorld.DebugLog("当前开服天不能传功: openServerDay=%s > %s" % (openServerDay, openServerDayLimit), playerID)
            return
    return True
def __Chuangong_Invite(curPlayer, tagPlayerID):
    ## 传功邀请
    if not __CheckCanChuangong(curPlayer):
        return
    SendGameServer_FamilyChuangong(curPlayer, "Invite", [tagPlayerID])
    return
def __Chuangong_Response(curPlayer, tagPlayerID, isOK):
    ## 传功回应
    SendGameServer_FamilyChuangong(curPlayer, "Response", [tagPlayerID, isOK])
    return
def __Chuangong_GetAward(curPlayer):
    ## 传功领奖
    if not __CheckCanChuangong(curPlayer):
        return
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyChuanGong, 1)
    playerID = curPlayer.GetPlayerID()
    fromLV = curPlayer.GetLV()
    # 给经验
    totalExp = 0
    giveRound = IpyGameDataPY.GetFuncCfg("FamilyChuangong", 3)
    worldlv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
    playerControl = PlayerControl.PlayerControl(curPlayer)
    for index in range(giveRound):
        reLV = curPlayer.GetLV()
        reExp = PlayerControl.GetPlayerReExp(curPlayer)
        giveExp = eval(IpyGameDataPY.GetFuncCompileCfg("FamilyChuangong", 2))
        finalAddExp = playerControl.AddExp(giveExp, ShareDefine.Def_ViewExpType_SysEx)
        totalExp += finalAddExp
        GameWorld.DebugLog("传功经验: 轮次=%s,reLV=%s,reExp=%s,finalAddExp=%s, %s" % (index, reLV, reExp, finalAddExp, totalExp), playerID)
    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyChuanGong, 1)
    PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ChuanGong, 1)
    # 给物品
    giveItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyChuangong", 4)
    ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList)
    # 同步结果
    syncItemList = []
    for itemID, itemCount, _ in giveItemList:
        syncItem = ChPyNetSendPack.tagMCChuangongItem()
        syncItem.Clear()
        syncItem.ItemID = itemID
        syncItem.ItemCount = itemCount
        syncItemList.append(syncItem)
    clientPack = ChPyNetSendPack.tagMCChuangongResult()
    clientPack.Clear()
    clientPack.FromLV = fromLV
    clientPack.ToLV = curPlayer.GetLV()
    clientPack.Exp = totalExp % ChConfig.Def_PerPointValue
    clientPack.ExpPoint = totalExp / ChConfig.Def_PerPointValue
    clientPack.AwardItemList = syncItemList
    clientPack.ItemCount = len(clientPack.AwardItemList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
##--------------------------------------------------------------------------------------------------