From 7bd89df4994934b9a5810e6b62383e6773b8339b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 十月 2023 20:28:47 +0800
Subject: [PATCH] 9952 【BT0.1】【主干】仙盟修改(传功)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py |  114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 0 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 e03761f..43f0e35 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/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
+
+##--------------------------------------------------------------------------------------------------

--
Gitblit v1.8.0