From 39821284a5372dce91658b8b9dfffc217a0f96f8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 23 十月 2020 16:14:53 +0800
Subject: [PATCH] 8415 【BT开发】]初始赠送 / 【后端】新号上线赠送物品

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py |   29 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py         |   52 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py         |   29 ++++++++-
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                              |   52 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                |    4 +
 5 files changed, 162 insertions(+), 4 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 32a3746..1d2c4b3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -20985,6 +20985,58 @@
 
 
 #------------------------------------------------------
+# A7 20 创角奖励领奖状态 #tagMCCreateRoleAwardState
+
+class  tagMCCreateRoleAwardState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GetState", c_ubyte),    # 是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA7
+        self.SubCmd = 0x20
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA7
+        self.SubCmd = 0x20
+        self.GetState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCreateRoleAwardState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 20 创角奖励领奖状态 //tagMCCreateRoleAwardState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GetState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GetState
+                                )
+        return DumpString
+
+
+m_NAtagMCCreateRoleAwardState=tagMCCreateRoleAwardState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCreateRoleAwardState.Cmd,m_NAtagMCCreateRoleAwardState.SubCmd))] = m_NAtagMCCreateRoleAwardState
+
+
+#------------------------------------------------------
 # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
 
 class  tagMCDynamicBarrier(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index a770ea6..33db31f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3488,6 +3488,7 @@
 
 Def_PDict_OnlinePrizeNote = "OnlinePrizeNote%s"  # 当日在线奖励领取信息,记录信息 参数天数
 
+Def_PDict_CreateRoleAwardState = "CreateRoleAwardState"  # 创角奖励领取记录
 Def_PDict_EquipViewCacheState = "EquipViewCacheState"  # 本次上线是否同步过装备缓存
 Def_PDict_DayOnlineTime = "OnlineTime"  # 当日在线时长
 Def_PDict_OnlineStartTick = "OnlineStartTime"        # 在线计算时间
@@ -5312,7 +5313,8 @@
 Def_RewardType_DayFreeGoldGift, #每日免费直购礼包29
 Def_RewardType_ActivityPlace, #活跃放置奖励30
 Def_RewardType_SkyTowerServerChallengeReward, #天星塔全服挑战层领奖31
-)= range(32)
+Def_RewardType_CreateRole, #创角奖励32
+)= range(33)
 
 
 #boss复活相关活动定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 32a3746..1d2c4b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -20985,6 +20985,58 @@
 
 
 #------------------------------------------------------
+# A7 20 创角奖励领奖状态 #tagMCCreateRoleAwardState
+
+class  tagMCCreateRoleAwardState(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("GetState", c_ubyte),    # 是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA7
+        self.SubCmd = 0x20
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA7
+        self.SubCmd = 0x20
+        self.GetState = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCreateRoleAwardState)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 20 创角奖励领奖状态 //tagMCCreateRoleAwardState:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                GetState:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.GetState
+                                )
+        return DumpString
+
+
+m_NAtagMCCreateRoleAwardState=tagMCCreateRoleAwardState()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCreateRoleAwardState.Cmd,m_NAtagMCCreateRoleAwardState.SubCmd))] = m_NAtagMCCreateRoleAwardState
+
+
+#------------------------------------------------------
 # A7 13 动态障碍物状态 #tagMCDynamicBarrierState
 
 class  tagMCDynamicBarrier(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
index 5002d43..3c83f56 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/ItemCommon.py
@@ -1594,6 +1594,35 @@
     return True
 
 #---------------------------------------------------------------------
+## 给奖励物品
+# @param awardItemInfo 奖励物品信息,支持字典按职业给,或者直接list
+# @return 布尔值
+def GiveAwardItem(curPlayer, awardItemInfo):
+    job = curPlayer.GetJob()
+    if isinstance(awardItemInfo, dict):
+        if str(job) not in awardItemInfo:
+            return
+        itemList = awardItemInfo[str(job)]
+    else:
+        itemList = awardItemInfo
+        
+    if not itemList:
+        return
+    
+    # 检查背包
+    needSpace = len(itemList)
+    packSpace = GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
+    if needSpace > packSpace:
+        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
+        return
+    
+    # 给物品
+    for itemInfo in itemList:
+        itemID, itemCount = itemInfo[:2]
+        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
+        
+    return True
+
 ##对外接口, 交换物品
 # @param curPlayer 玩家实例
 #  @param curItem 当前物品
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 2db78bf..f21ca0e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -720,6 +720,8 @@
     SkillShell.NotifyElementSkillInfo(curPlayer)
     #Boss首杀
     GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
+    #创角奖励
+    Sync_CreateRoleAwardInfo(curPlayer)
     
     curPlayer.SetState(0)   # 脱机挂恢复为正常上线
     curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
@@ -5383,12 +5385,33 @@
     #历史累计充值领取
     elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
         PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
-    #天星塔全服挑战层领奖
-    elif rewardType == ChConfig.Def_RewardType_SkyTowerServerChallengeReward:
-        GameLogic_SkyTower.OnGetSkyTowerServerChallengeReward(curPlayer, dataEx)
+    #创角奖励
+    elif rewardType == ChConfig.Def_RewardType_CreateRole:
+        OnGetCreateRoleAward(curPlayer)
     return
     
+## 领取创角奖励
+def OnGetCreateRoleAward(curPlayer):
+    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CreateRoleAwardState):
+        GameWorld.DebugLog("已领取创角奖励!")
+        return
     
+    if not ItemCommon.GiveAwardItem(curPlayer, IpyGameDataPY.GetFuncEvalCfg("CreateRoleAward")):
+        return
+    
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CreateRoleAwardState, 1)
+    Sync_CreateRoleAwardInfo(curPlayer)
+    return
+
+## 通知创角领奖记录
+def Sync_CreateRoleAwardInfo(curPlayer):
+    sendPack = ChPyNetSendPack.tagMCCreateRoleAwardState()
+    sendPack.Clear()
+    sendPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CreateRoleAwardState)
+    NetPackCommon.SendFakePack(curPlayer, sendPack)
+    return
+
+
 ## 通知各奖励领取记录信息
 #  @param curPlayer: 玩家实例
 #  @param rewardType: 奖励类型

--
Gitblit v1.8.0