From f089bf39d557fc228f7bd3b2eb8c85c7b402e7dc Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 02 十一月 2018 18:40:13 +0800
Subject: [PATCH] 4575 脱机挂测试
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 153 ++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 140 insertions(+), 13 deletions(-)
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 29bb164..1fc2d40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -64,7 +64,7 @@
import FBCommon
import PlayerBindJadeWheel
import BossHurtMng
-import PlayerAction
+import PlayerWishingWell
import PlayerAttrFruit
import PlayerSuccess
import PlayerDienstgrad
@@ -75,7 +75,7 @@
import Operate_EquipSuitCompose
import PlayerEquipDecompose
import PlayerCoat
-import PlayerQQ
+import PlayerGreatMaster
import PlayerCostVIP
import PlayerMergeKing
import PlayerMergePK
@@ -328,7 +328,7 @@
Operate_EquipStone.OnLogin(curPlayer)
#大师
- #PlayerGreatMaster.MasterOnLogin(curPlayer)
+ PlayerGreatMaster.MasterOnLogin(curPlayer)
#通知VIP
PlayerVip.DoOnLogin(curPlayer, tick)
@@ -546,9 +546,14 @@
FamilyRobBoss.OnPlayerLogin(curPlayer)
# 绑玉转盘
PlayerBindJadeWheel.OnLogin(curPlayer)
-
+ # 许愿池
+ PlayerWishingWell.OnLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
+ # 小助手
+ SyncLittleHelper(curPlayer)
+ # 聊天气泡框
+ SyncChatBubbleBoxState(curPlayer)
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
@@ -922,14 +927,23 @@
#这里只做初始化逻辑
#在玩家切换场景的时候, 不会调用到这里
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- InitLoginPlayer(curPlayer, tick)
- DoPlayerLogin(curPlayer, tick)
+ try:
+ InitLoginPlayer(curPlayer, tick)
+ DoPlayerLogin(curPlayer, tick)
+
+ #锁住玩家, 等到读取地图成功, 再解锁
+ curPlayer.SetCanMove(False)
+
+ #登陆发图形验证码
+ PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
+ except:
+ curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
+ import traceback
+ GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
+ if GameWorld.GetGameWorld().GetDebugLevel():
+ raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc())
+ return
- #锁住玩家, 等到读取地图成功, 再解锁
- curPlayer.SetCanMove(False)
-
- #登陆发图形验证码
- PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
#---------------------------------------------------------------------
##C++封包触发, 玩家切换地图的时候, 在本地图登录
@@ -2417,7 +2431,7 @@
import traceback
GameWorld.ErrLog("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
if GameWorld.GetGameWorld().GetDebugLevel():
- raise Exception("玩家下线~~~~~\r\n%s" % traceback.format_exc())
+ raise Exception("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
#调用底层使玩家下线
curPlayer.DoDisconnect(tick)
@@ -2515,6 +2529,113 @@
return
curPlayer.SetSetting(setting)
+ return
+
+#// A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox
+#
+#struct tagCMSetChatBubbleBox
+#{
+# tagHead Head;
+# BYTE BubbleBoxType; //气泡框类型
+#};
+def OnSetChatBubbleBox(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ useBoxID = clientData.BubbleBoxType
+ GameWorld.DebugLog("设置使用的聊天气泡框ID: useBoxID=%s" % useBoxID, curPlayer.GetPlayerID())
+
+ ipyData = IpyGameDataPY.GetIpyGameData("ChatBubbleBox", useBoxID)
+ if not ipyData:
+ return
+
+ curBoxState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ChatBubbleBoxState, useBoxID)
+ if not curBoxState:
+ needLV = ipyData.GetNeedLV()
+ if needLV and curPlayer.GetLV() < needLV:
+ GameWorld.DebugLog(" 等级不足,无法使用该气泡框!needLV=%s" % needLV, curPlayer.GetPlayerID())
+ return
+
+ needVIPLVGift = ipyData.GetNeedVIPLVGift() # 兼容已购买VIP礼包的老号用
+ if needVIPLVGift:
+ record = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_VipAwardRecord)
+ hasBuy = record & pow(2, needVIPLVGift)
+ if not hasBuy:
+ GameWorld.DebugLog(" 未购买VIP礼包,无法使用该气泡框!needVIPLVGift=%s" % needVIPLVGift, curPlayer.GetPlayerID())
+ return
+
+ PlayerControl.SetChatBubbleBox(curPlayer, useBoxID)
+ return
+
+def DoActivateChatBubbleBox(curPlayer, boxID):
+ ## 激活聊天气泡框
+ ipyData = IpyGameDataPY.GetIpyGameData("ChatBubbleBox", boxID)
+ if not ipyData:
+ return
+ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_ChatBubbleBoxState, boxID, 1)
+ SyncChatBubbleBoxState(curPlayer)
+ return True
+
+def SyncChatBubbleBoxState(curPlayer):
+ ## 同步聊天气泡框状态
+ boxState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ChatBubbleBoxState % 0)
+ if not boxState:
+ return
+ boxStatePack = ChPyNetSendPack.tagMCChatBubbleBoxState()
+ boxStatePack.BoxState = boxState
+ NetPackCommon.SendFakePack(curPlayer, boxStatePack)
+ return
+
+#// A2 29 设置小助手 #tagCMSetLittleHelper
+#
+#struct tagCMSetLittleHelper
+#{
+# tagHead Head;
+# BYTE SetNum; // 托管功能设置编号1~20,每个编号对应的托管功能前端自定义
+# DWORD Value1; // 自定义值1
+# DWORD Value2; // 自定义值2
+# DWORD Value3; // 自定义值3
+# DWORD Value4; // 自定义值4
+# DWORD Value5; // 自定义值5
+# DWORD Value6; // 自定义值6
+#};
+def OnSetLittleHelper(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ setNum = clientData.SetNum
+ if setNum > ChConfig.LittleHelperSetNumCount:
+ GameWorld.ErrLog("小助手不支持该设置编号! setNum=%s" % setNum, curPlayer.GetPlayerID())
+ return
+ for i in xrange(1, ChConfig.LittleHelperValueCount + 1):
+ if not hasattr(clientData, "Value%s" % i):
+ GameWorld.ErrLog("小助手不支持该值编号设置! setNum=%s,value%s" % (setNum, i), curPlayer.GetPlayerID())
+ continue
+ value = getattr(clientData, "Value%s" % i)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LittleHelperValue % (setNum, i), value)
+ GameWorld.DebugLog("小助手值设置: setNum=%s,value%s=%s" % (setNum, i, value), curPlayer.GetPlayerID())
+ return
+
+def SyncLittleHelper(curPlayer):
+ ## 同步小助手设置,仅有值的同步
+ funcSetList = []
+ for setNum in xrange(ChConfig.LittleHelperSetNumCount + 1):
+ funcSet = None
+ for i in xrange(1, ChConfig.LittleHelperValueCount + 1):
+ value = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_LittleHelperValue % (setNum, i))
+ if not value:
+ continue
+ if not funcSet:
+ funcSet = ChPyNetSendPack.tagMCLittleHelperFuncSet()
+ funcSet.SetNum = setNum
+ if hasattr(funcSet, "Value%s" % i):
+ setattr(funcSet, "Value%s" % i, value)
+ if funcSet:
+ funcSetList.append(funcSet)
+
+ if not funcSetList:
+ return
+
+ setPack = ChPyNetSendPack.tagMCLittleHelperSet()
+ setPack.FuncSetList = funcSetList
+ setPack.FuncSetCount = len(setPack.FuncSetList)
+ NetPackCommon.SendFakePack(curPlayer, setPack)
return
#// A2 22 设置引导成功 #tagCMSetGuideOK
@@ -3445,7 +3566,7 @@
#@return 返回值无意义
#@remarks 客户端封包响应 //03 10 退出副本#tagCExitFB
def __Func_ExitFB(curPlayer, tick):
- if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
+ if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull and curPlayer.GetMapID() not in IpyGameDataPY.GetFuncEvalCfg("MapLine", 4):
return
GameWorld.Log('玩家 = %s , 主动离开副本' % (curPlayer.GetName()) , curPlayer.GetID())
@@ -4981,6 +5102,12 @@
# 领取分包下载奖励
elif rewardType == ChConfig.Def_RewardType_DownLoad:
GetDownloadAward(curPlayer, dataEx)
+ # 领取许愿池奖励
+ elif rewardType == ChConfig.Def_RewardType_WishingWell:
+ PlayerWishingWell.DoGetWishingAward(curPlayer)
+ # 功能开启奖励
+ elif rewardType == ChConfig.Def_RewardType_OpenFunc:
+ GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
#
# # 充值豪礼奖励
# elif rewardType == ShareDefine.Def_RewardType_GoldGift:
--
Gitblit v1.8.0