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 | 212 +++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 175 insertions(+), 37 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 b295e14..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,7 +102,7 @@
import PlayerTJG
import GameLogic_XMZZ
import GameLogic_SealDemon
-import GameLogic_Dogz
+import PlayerFlashSale
import PlayerFlashGiftbag
import PlayerCostRebate
import PlayerSpringSale
@@ -328,7 +328,7 @@
Operate_EquipStone.OnLogin(curPlayer)
#大师
- #PlayerGreatMaster.MasterOnLogin(curPlayer)
+ PlayerGreatMaster.MasterOnLogin(curPlayer)
#通知VIP
PlayerVip.DoOnLogin(curPlayer, tick)
@@ -491,7 +491,8 @@
PlayerSpringSale.OnPlayerLogin(curPlayer)
#限时礼包
PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
-
+ #限时抢购
+ PlayerFlashSale.OnPlayerLogin(curPlayer)
# # 消费VIP
# PlayerCostVIP.CostVIPOnLogin(curPlayer, tick)
#
@@ -541,20 +542,28 @@
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
@@ -918,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++封包触发, 玩家切换地图的时候, 在本地图登录
@@ -2413,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)
@@ -2511,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
@@ -3441,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())
@@ -4387,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 \
@@ -4498,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)
@@ -4993,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:
@@ -5331,13 +5446,23 @@
# @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.OpenServerTime = GameWorld.ChangeTimeNumToStr(gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_InitOpenServerTime))
+ 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
@@ -5534,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