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 | 91 +++++++++++++++++++++++++++++++++++++++------
1 files changed, 79 insertions(+), 12 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 d80d601..1fc2d40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -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)
@@ -552,6 +552,8 @@
curPlayer.SendDBQueryRecharge()
# 小助手
SyncLittleHelper(curPlayer)
+ # 聊天气泡框
+ SyncChatBubbleBoxState(curPlayer)
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
@@ -925,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++封包触发, 玩家切换地图的时候, 在本地图登录
@@ -2420,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)
@@ -2520,6 +2531,59 @@
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
@@ -2531,6 +2595,7 @@
# DWORD Value3; // 自定义值3
# DWORD Value4; // 自定义值4
# DWORD Value5; // 自定义值5
+# DWORD Value6; // 自定义值6
#};
def OnSetLittleHelper(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
@@ -3501,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())
@@ -5040,7 +5105,9 @@
# 领取许愿池奖励
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