hxp
2024-10-29 328648da94a07437fc46024f3e9b7e48c2e2ae38
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -183,6 +183,7 @@
    curPlayer.SetFamilyActiveValue(0)
    curPlayer.SetLastWeekFamilyActiveValue(0)
    curPlayer.SetFamilyLV(0)
    PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time()))
    
    #触发玩家离开家族的任务
    EventShell.EventResponse_OnLeaveFamily(curPlayer)
@@ -637,6 +638,10 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyMoneyDonateCount, 0)
    Sync_FamilyDayRewardState(curPlayer)
    __FamilyAffair_Refresh(curPlayer, True)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeCut, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy, 0)
    Sync_ZhenbaogeInfo(curPlayer)
    return
@@ -652,6 +657,7 @@
    Sync_FamilyDayRewardState(curPlayer)
    __FamilyAffair_CheckReset(curPlayer)
    PlayerFamilyZhenfa.OnPlayerLogin(curPlayer)
    Sync_ZhenbaogeInfo(curPlayer)
    return
def FamilyPlayerOnLoginCross(curPlayer):
@@ -1301,3 +1307,106 @@
    return
##--------------------------------------------------------------------------------------------------
##----------------------------------------- 珍宝阁 --------------------------------------------------
#// A6 16 珍宝阁操作 #tagCMZhenbaogeOP
#
#struct    tagCMZhenbaogeOP
#{
#    tagHead     Head;
#    BYTE    OpType;    // 操作:0-砍价;1-购买
#};
def OnZhenbaogeOP(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    opType = clientData.OpType
    playerID = curPlayer.GetPlayerID()
    if not curPlayer.GetFamilyID():
        GameWorld.DebugLog("没有仙盟无法操作珍宝阁!", playerID)
        return
    # 砍价
    if opType == 0:
        leaveTimeEx = PlayerControl.GetLeaveFamilyTimeEx(curPlayer)
        cutState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeCut)
        if cutState and leaveTimeEx:
            cutCDTimes = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 3) * 60
            passTimes = int(time.time()) - leaveTimeEx
            if passTimes < cutCDTimes:
                GameWorld.DebugLog("今日已砍价变更仙盟砍价CD中! passTimes=%s < %s" % (passTimes, cutCDTimes), playerID)
                return
        SendGameServer_FamilyZhenbaoge(curPlayer, "Cut", [])
    # 购买
    elif opType == 1:
        buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy)
        if buyState:
            GameWorld.DebugLog("珍宝阁今日已购买!", playerID)
            return
        moneyType = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 1)
        playerMoneyValue = PlayerControl.GetMoney(curPlayer, moneyType)
        SendGameServer_FamilyZhenbaoge(curPlayer, "Buy", [playerMoneyValue])
    return
def SendGameServer_FamilyZhenbaoge(curPlayer, msgType, msgData):
    playerID = curPlayer.GetPlayerID()
    tick = GameWorld.GetGameWorld().GetTick()
    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_FamilyZhenbaoge, tick):
        GameWorld.DebugLog("请求CD中...", playerID)
        return
    GameWorld.DebugLog("珍宝阁同步GameServer: msgType=%s,%s" % (msgType, msgData), playerID)
    msgInfo = str([msgType, msgData])
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "FamilyZhenbaoge", msgInfo, len(msgInfo))
    return
def GameServer_FamilyZhenbaogeRet(curPlayer, resultList):
    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FamilyZhenbaoge, 0)
    playerID = curPlayer.GetPlayerID()
    msgType, _ = resultList[:2]
    retData = resultList[2:]
    GameWorld.Log("仙盟珍宝阁GameServer返回: %s" % str(resultList), playerID)
    if msgType == "Cut":
        cutPrice = retData[0]
        if not cutPrice:
            # 砍价失败不处理后续
            return
        PlayerControl.NotifyCode(curPlayer, "ZhenbaogeCut", [cutPrice])
        if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeCut):
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeCut, 1)
            Sync_ZhenbaogeInfo(curPlayer)
    elif msgType == "Buy":
        isOK = retData[0]
        if not isOK:
            return
        buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy)
        if buyState:
            #一天只能买一次,防止变更仙盟刷
            return
        nowPrice, giveItemList = retData[1:]
        moneyType = IpyGameDataPY.GetFuncCfg("Zhenbaoge", 1)
        if nowPrice > 0:
            if not PlayerControl.PayMoney(curPlayer, moneyType, nowPrice, "Zhenbaoge"):
                GameWorld.ErrLog("珍宝阁购买货币不足! nowPrice=%s" % nowPrice, playerID)
                return
        elif nowPrice < 0:
            PlayerControl.GiveMoney(curPlayer, moneyType, -nowPrice, "Zhenbaoge")
        else: # 0不处理
            pass
        if giveItemList:
            ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, event=["Zhenbaoge", False, {}])
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy, 1)
        Sync_ZhenbaogeInfo(curPlayer)
    return
def Sync_ZhenbaogeInfo(curPlayer):
    clientPack = ChPyNetSendPack.tagMCFamilyZhenbaogeInfo()
    clientPack.CutState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeCut)
    clientPack.BuyState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyZhenbaogeBuy)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return
##--------------------------------------------------------------------------------------------------