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 | 242 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 203 insertions(+), 39 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 ac6ef1d..1fc2d40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -62,9 +62,9 @@
import PlayerActivity
import PlayerTeHui
import FBCommon
-import HighLadderTube
+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
@@ -102,12 +102,13 @@
import PlayerTJG
import GameLogic_XMZZ
import GameLogic_SealDemon
-import GameLogic_Dogz
+import PlayerFlashSale
import PlayerFlashGiftbag
import PlayerCostRebate
import PlayerSpringSale
import PlayerFairyCeremony
import ChNetSendPack
+import FamilyRobBoss
import PyGameData
import PlayerCoin
import PlayerGeTui
@@ -237,6 +238,7 @@
curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
#通知时间
Sync_PyServerDataTimeToClient(curPlayer)
+ Sync_OpenServerDay(curPlayer)
#通知玩家基本信息
curPlayer.Sync_ClientPlayerLogin()
@@ -326,7 +328,7 @@
Operate_EquipStone.OnLogin(curPlayer)
#大师
- #PlayerGreatMaster.MasterOnLogin(curPlayer)
+ PlayerGreatMaster.MasterOnLogin(curPlayer)
#通知VIP
PlayerVip.DoOnLogin(curPlayer, tick)
@@ -489,7 +491,8 @@
PlayerSpringSale.OnPlayerLogin(curPlayer)
#限时礼包
PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
-
+ #限时抢购
+ PlayerFlashSale.OnPlayerLogin(curPlayer)
# # 消费VIP
# PlayerCostVIP.CostVIPOnLogin(curPlayer, tick)
#
@@ -537,20 +540,30 @@
SyncPackDownloadAward(curPlayer)
# 登录触发功能开启(老号处理)
GameFuncComm.DoFuncOpenLogic(curPlayer)
- # 神兽
+ # 神兽
PlayerDogz.OnPlayerLogin(curPlayer)
- # 神兽副本
- GameLogic_Dogz.SyncNPCRefreshTime(curPlayer.GetID())
-
+ # 骑宠
+ FamilyRobBoss.OnPlayerLogin(curPlayer)
+ # 绑玉转盘
+ PlayerBindJadeWheel.OnLogin(curPlayer)
+ # 许愿池
+ PlayerWishingWell.OnLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
+ # 小助手
+ SyncLittleHelper(curPlayer)
+ # 聊天气泡框
+ SyncChatBubbleBoxState(curPlayer)
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
tjgTime = PlayerTJG.GetTJGTime(curPlayer)
if tjgTime:
curPlayer.SendGameServerRefreshState(IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
-
+
+ # 如果被禁言的,上线同步前端
+ if curPlayer.GetGMForbidenTalk():
+ curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, curPlayer.GetGMForbidenTalk(), False)
return
@@ -914,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++封包触发, 玩家切换地图的时候, 在本地图登录
@@ -1846,6 +1868,7 @@
curMap = GameWorld.GetMap()
#校验客户端时间
if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, clientWorldTick, client_StartX, client_StartY):
+ curPlayer.Sync_ClientTick()
return
#移动点检查
@@ -2408,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)
@@ -2506,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
@@ -3436,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())
@@ -3479,8 +3609,14 @@
return
mapID = curPlayer.GetMapID()
+
+ activityLineID = 0 # 活动线, 默认1线
+ activityMapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 2, {})
+ if mapID in activityMapLineDict:
+ activityLineID = max(0, activityMapLineDict[mapID] - 1)
+
mapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 1)
- if mapID in mapLineDict and changLineID >= mapLineDict[mapID]:
+ if changLineID != activityLineID and mapID in mapLineDict and changLineID >= mapLineDict[mapID]:
GameWorld.ErrLog("该地图没有开放此线路,无法手动切换!mapID=%s,changLineID=%s,maxLine=%s"
% (mapID, changLineID, mapLineDict[mapID]), curPlayer.GetID())
return
@@ -3663,6 +3799,7 @@
rebornTime = GetRebronTime(curPlayer, playerRebornType)
#冷却时间到了
if not CanRebornByTimeOver(curPlayer, rebornTime):
+ PlayerControl.NotifyCode(curPlayer, 'RebornCD')
return False
isFBReborn = False
@@ -4375,16 +4512,6 @@
PlayerControl.NotifyCode(curPlayer, "04BBF813-7A30-47A8-927DE1ACCC4F378E")
return
-#===============================================================================
-# isFreedomTransBuff = SkillCommon.GetPlayerBuffBySkillTypeID(curPlayer, ShareDefine.Def_FreedomTransBuffID)
-# if not PlayerControl.IsPlayerInFight(curPlayer):
-#
-# if (transportType == ChConfig.Def_Transport_Type_BigMap) or (not isFreedomTransBuff):
-# #传送支付处理
-#
-# if not PayForTransport(curPlayer, transportType, isAutoBuy):
-# return
-#===============================================================================
#是任务传送,VIP等级不够,且传送符不足,不处理
if transportType == ChConfig.Def_Transport_Type_Mission and \
not TransportVipLvRestrict(curPlayer, transportType) and \
@@ -4486,12 +4613,6 @@
# @param transportType 传送类型
# @return 是否vip等级限制
def TransportVipLvRestrict(curPlayer, transportType):
-
- #大地图标记传送不能体验无限飞buff功能
- if transportType != ChConfig.Def_Transport_Type_BigMap:
- if SkillCommon.GetPlayerBuffBySkillTypeID(curPlayer, ShareDefine.Def_FreedomTransBuffID):
- #有无限飞buff
- return True
return PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FreeTransport)
@@ -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:
@@ -5267,7 +5394,7 @@
# 请求GameServer目标地图NPC信息
sendMsg = "%s" % str([tagMapID, tagLineID, npcIDList])
curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NPCCnt, 0,
- 'NPCCntInfo', sendMsg, len(sendMsg))
+ 'NPCCnt', sendMsg, len(sendMsg))
return
@@ -5315,6 +5442,29 @@
NetPackCommon.SendFakePack(curPlayer, serverDateTime)
return
+## 通知开服天数
+# @param curPlayer: 玩家实例
+# @return: None
+def Sync_OpenServerDay(curPlayer):
+ serverTime = GameWorld.GetCurrentTime()
+ if not serverTime:
+ return
+ gw = GameWorld.GetGameWorld()
+ packData = ChPyNetSendPack.tagOpenServerDay()
+ packData.Clear()
+ packData.Day = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
+ packData.IsMixServer = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
+ packData.MixDay = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
+ packData.OpenWeekday = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday)
+ packData.NowYear = serverTime.year
+ packData.NowMonth = serverTime.month
+ packData.NowDay = serverTime.day
+ packData.NowHour = serverTime.hour
+ packData.NowMinute = serverTime.minute
+ packData.NowSecond = serverTime.second
+ packData.NowMicSecond = serverTime.microsecond
+ NetPackCommon.SendFakePack(curPlayer, packData)
+ return
#===============================================================================
# //B4 09 玩家移动 # tagCMPyMove
@@ -5408,6 +5558,7 @@
#校验客户端时间
if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, sendPack_WorldTick, sendPack_SeverPosX, sendPack_SeverPosY):
+ curPlayer.Sync_ClientTick()
return False
dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), sendPack_SeverPosX, sendPack_SeverPosY)
@@ -5508,4 +5659,17 @@
sendPack.Clear()
sendPack.Record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState)
NetPackCommon.SendFakePack(curPlayer, sendPack)
- return
\ No newline at end of file
+ return
+
+def NotifyPlayerMove(curPlayer, posX, posY, npcID=0):
+ '''通知前端向某个点移动
+ 这里前端可能需要针对某次移动做额外处理,比如移动到某个点后需要自动战斗等
+ 所以这里只做通知前端可以向某个点移动,最终移动由前端发起
+ '''
+ sendPack = ChPyNetSendPack.tagMCNotifyPlayerMove()
+ sendPack.Clear()
+ sendPack.PosX = posX
+ sendPack.PosY = posY
+ sendPack.NPCID = npcID
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
+ return
--
Gitblit v1.8.0