From 08e3e6cea67b249564abac36ea1e8aefa17982e4 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 12 三月 2019 16:36:47 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 257 ++++++++++++++++++++++++++++----------------------
1 files changed, 144 insertions(+), 113 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 dcc2219..bad7fa6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -49,7 +49,6 @@
import PlayerLVAward
import PlayerGoldGift
import PlayerSignDay
-import MixServerCampaign
import PlayerPet
import PlayerPrestigeSys
import PlayerFamily
@@ -65,7 +64,6 @@
import PlayerAttrFruit
import PlayerSuccess
import PlayerDienstgrad
-import PlayerMixLoginDayAward
import PlayerFreeGoods
import PlayerRecover
import GameLogic_IceLode
@@ -104,6 +102,8 @@
import PlayerSpringSale
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import PlayerFeastRedPacket
+import PlayerLuckyTreasure
import CrossRealmPlayer
import ChNetSendPack
import FamilyRobBoss
@@ -228,6 +228,45 @@
return
+#// A2 31 前端开始自定义场景 #tagCMClientStartCustomScene
+#
+#struct tagCMClientStartCustomScene
+#{
+# tagHead Head;
+#};
+def OnClientStartCustomScene(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ DoEnterCustomScene(curPlayer)
+ return
+
+def DoEnterCustomScene(curPlayer):
+ ## 进入自定义场景状态
+ curPlayer.SetCanAttack(False)
+ curPlayer.SetVisible(False)
+ curPlayer.SetSight(0)
+ curPet = curPlayer.GetPetMgr().GetFightPet()
+ if curPet:
+ curPet.SetVisible(False)
+
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 1)
+ GameWorld.Log("玩家开始自定义场景!", curPlayer.GetPlayerID())
+ return
+
+def DoExitCustomScene(curPlayer):
+ ## 退出自定义场景状态
+ curPlayer.SetCanAttack(True)
+ curPlayer.SetVisible(True)
+ curPlayer.SetSight(1)
+ curPlayer.RefreshView()
+ curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
+ curPlayer.RefreshView()
+ curPet = curPlayer.GetPetMgr().GetFightPet()
+ if curPet:
+ curPet.SetVisible(True)
+ curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 0)
+ GameWorld.Log("玩家退出自定义场景!", curPlayer.GetPlayerID())
+ return
+
#// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
#
#struct tagCMRefreshMainServerRole
@@ -248,8 +287,16 @@
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.ReCalcAllState()
+ # 同步所有buff
+ __Sync_ClientBuff(curPlayer)
+
+ PlayerState.Sync_PKBossState(curPlayer)
+
if PlayerControl.GetCrossMapID(curPlayer):
CrossRealmPlayer.DoExitCrossRealm(curPlayer)
+
+ if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
+ DoExitCustomScene(curPlayer)
msgInfo = ""
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
@@ -449,8 +496,6 @@
#通知玩家技能信息
__Sync_ClientSkill(curPlayer)
- #替换旧物品
- ItemControler.LoginCheckChangeOldItem(curPlayer)
#清除生产采集Buff
#PlayerControl.DelProduceBuff(curPlayer, tick)
#清除国家答题Buff
@@ -492,11 +537,11 @@
SyncPKModel(curPlayer)
#通用强化星级信息
- ChEquip.NotifyEquipPartStarLV(curPlayer)
+ ChEquip.NotifyEquipPartPlusLV(curPlayer)
+ ChEquip.NotifyEquipPartStar(curPlayer)
Operate_EquipWash.OnEquipWashLogin(curPlayer)
#通知套装信息
- ChEquip.NotifyEquipPartSuiteLV(curPlayer)
- ChEquip.SyncAllEquipAttrActiveInfo(curPlayer)
+ #ChEquip.SyncAllEquipAttrActiveInfo(curPlayer)
#装备位宝石镶嵌通知
Operate_EquipStone.OnLogin(curPlayer)
@@ -589,12 +634,6 @@
# 开服活动奖励信息
OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer)
#
-# # 通知合服奖励领取状态
-# PlayerMixLoginDayAward.OnLoginNotifyMixLoginDayAward(curPlayer)
-#
-# # 通知合服奖励
-# MixServerCampaign.OnMixServerCampaignLogin(curPlayer)
-#
# # 节日登陆奖励
# PlayerFestivalLogin.OnLoginFestivalLogin(curPlayer)
@@ -682,6 +721,7 @@
PlayerRune.PlayerRuneLogin(curPlayer)
# 仙盟红包登录通知
PlayerFamilyRedPacket.OnPlayerLogin(curPlayer)
+ PlayerFeastRedPacket.DoPlayerOnLogin(curPlayer)
# 法宝登录通知
PlayerMagicWeapon.PlayerMagicWeaponLogin(curPlayer)
# 商店物品购买次数登录通知
@@ -729,6 +769,8 @@
PlayerBindJadeWheel.OnLogin(curPlayer)
# 许愿池
PlayerWishingWell.OnLogin(curPlayer)
+ #幸运鉴宝
+ PlayerLuckyTreasure.OnLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
# 小助手
@@ -772,37 +814,57 @@
if not isMixServer:
return
- lastMixServerDayKey = ShareDefine.Def_Notify_WorldKey_LastMixServerDay
- lastMixServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(lastMixServerDayKey)
- GameWorld.DebugLog("合服首登处理lastMixServerDay=%s" % lastMixServerDay, curPlayer.GetPlayerID())
+ playerID = curPlayer.GetPlayerID()
+ lastMixServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_LastMixServerDay)
playerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDay)
if playerDay == lastMixServerDay:
- GameWorld.DebugLog("本次合服已经登录过.")
+ GameWorld.DebugLog("本次合服已经登录过. lastMixServerDay=%s" % (lastMixServerDay), playerID)
return
-
+ mixServerWorldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_LastMixServerWorldLV) # 合服时的世界等级
+ GameWorld.Log("玩家合服首登处理! lastMixServerDay=%s,mixServerWorldLV=%s" % (lastMixServerDay, mixServerWorldLV), playerID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDay, lastMixServerDay)
+ # 重置首充双倍
+ PlayerCoin.DoResetCTGCount(curPlayer, "MixServer")
+
+ # 重置商店购买次数,暂定只重置类型 7 的
+ FunctionNPCCommon.ResetShopItemBuyCount(curPlayer, [7])
+
+ # 合服邮件,盟主专属邮件在GameServer处理
+ mailItemList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 1)
+ worldLVMailItemList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 2)
+ mailMoneyList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 3)
+ worldLVDown = IpyGameDataPY.GetFuncCfg("MixServerMail", 5) # 等级丹相对合服世界等级差值
+ itemWorldLV = max(150, mixServerWorldLV - worldLVDown)
+ goldPaper, silver = mailMoneyList
+ worldLVItemList = []
+ for itemID, itemCount, isBind in worldLVMailItemList:
+ itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
+ if not itemData:
+ continue
+ curEff = itemData.GetEffectByIndex(0)
+ curEffID = curEff.GetEffectID()
+ if curEffID != ChConfig.Def_Effect_ItemAddLV:
+ continue
+ lvLimit = curEff.GetEffectValue(1)
+ if not lvLimit:
+ continue
+ if lvLimit <= itemWorldLV:
+ worldLVItemList = [[itemID, itemCount, isBind]]
+ else:
+ break
+ detailDict = {"MixServerWorldLV":mixServerWorldLV, "LastMixServerDay":lastMixServerDay, "ItemWorldLV":itemWorldLV}
+ addItemList = mailItemList + worldLVItemList
+ PlayerControl.SendMailByKey("MixServer1", [playerID], addItemList, goldPaper=goldPaper, silver=silver, detail=detailDict)
+ GameWorld.Log(" 发送合服补偿邮件: itemWorldLV=%s,addItemList=%s" % (itemWorldLV, addItemList), playerID)
+
# 同步排行榜
- PlayerBillboard.UpdBillboardOnMixServerFirstLogin(curPlayer, lastMixServerDay)
-
- # 其他
- # ...
- # 重置登录奖励领取状态
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDayState, 0)
- PlayerMixLoginDayAward.NotifyPlayerAwardState(curPlayer)
-
- # 重置各合服活动数据
- for campaignType in ShareDefine.Def_MixCampaign_Type_List:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
- % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_RecordData \
- % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
-
+ PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
# 重置玩家改名次数
- UpdatePlayerName.ResetChangeNameCnt(curPlayer)
+ #UpdatePlayerName.ResetChangeNameCnt(curPlayer)
return
#---------------------------------------------------------------------
@@ -1290,7 +1352,7 @@
#设置装备实际个数
curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
- curPack.SetCount(ShareDefine.retMax)
+ curPack.SetCount(ChConfig.Def_PackCnt_Equip)
#初始化垃圾桶
#curPack = itemManager.GetPack(IPY_GameWorld.rptRecycle)
@@ -1761,6 +1823,42 @@
return
#===============================================================================
+# //B4 14 根据类型来决定移动的方式 #tagMCMoveByType
+#
+# struct tagMCMoveByType
+# {
+# tagHead Head;
+# DWORD ID; //玩家ID
+# WORD PosX; // 目标X
+# WORD PosY; // 目标Y
+# BYTE MoveType; //移动方式
+# };
+#===============================================================================
+def OnMoveByType(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+
+ #玩家移动通用检查
+ if not __CheckPlayerCanMove(curPlayer):
+ return
+
+ #先验证目标点是否合法
+ if not GameWorld.GetMap().CanMove(clientData.PosX, clientData.PosY):
+ return
+
+ curPlayer.StopMove()
+ curPlayer.ChangePos(clientData.PosX, clientData.PosY)
+ sendPack = ChPyNetSendPack.tagMCMoveByType()
+ sendPack.Clear()
+ sendPack.ID = curPlayer.GetID()
+ sendPack.ObjType = curPlayer.GetGameObjType()
+ sendPack.PosX = clientData.PosX
+ sendPack.PosY = clientData.PosY
+ sendPack.MoveType = clientData.MoveType
+
+ PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1)
+ return
+
+#===============================================================================
# //B4 04 战前冲锋 #tagCMRush
#
# struct tagCMRush
@@ -1791,7 +1889,15 @@
#===========================================================================
#超出视野
- if GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), clientData.PosX, clientData.PosY) > curPlayer.GetSight():
+ if curPlayer.GetSight() and GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), clientData.PosX, clientData.PosY) > curPlayer.GetSight():
+ return
+
+ #玩家移动通用检查
+ if not __CheckPlayerCanMove(curPlayer):
+ return
+
+ #先验证目标点是否合法
+ if not GameWorld.GetMap().CanMove(clientData.PosX, clientData.PosY):
return
curPlayer.StopMove()
@@ -5170,81 +5276,6 @@
'RequestIsFamily', sendMsg, len(sendMsg))
return
-
-#===============================================================================
-#// AF 02 合服活动奖励 #tagCMMixCampaignAward
-#
-#struct tagCMMixCampaignAward
-#
-#{
-# tagHead Head;
-# BYTE Type; //0-查询;1-领取
-# DWORD CampaignType; //奖励类型
-# BYTE Index; //奖励位,领取时用
-#};
-#===============================================================================
-## 合服活动奖励
-# @param index: 玩家索引
-# @param clientData: 封包结构体
-# @param tick: 时间戳
-# @return:
-def GiveMixServerCampaignAward(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-
- campaignType = clientData.CampaignType
- queryType = clientData.Type
- awardIndex = clientData.Index # 奖励位
-
- GameWorld.DebugLog("GiveMixServerCampaignAward campaignType=%s,queryType=%s,awardIndex=%s"
- % (campaignType, queryType, awardIndex))
- if queryType == ShareDefine.Def_MSCGameServerQuery_MailAward:
- GameWorld.DebugLog(" 客户端不可发领取合服邮件奖励类型")
- return
-
- isMix = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
- if not isMix:
- GameWorld.ErrLog(" 当前非合服状态!")
- return
-
- if campaignType not in ShareDefine.Def_MixCampaign_Type_List:
- GameWorld.ErrLog(" 合服活动类型错误campaignType=%s error! not define" % campaignType)
- return
-
- # 如果直接在MapServer中处理,则返回
- if MixServerCampaign.DoMixServerCampaignOnMapServer(curPlayer, campaignType, queryType, awardIndex):
- return
-
- awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
- % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
- awardState = GameWorld.GetDataByDigitPlace(awardRecord, awardIndex)
-
- if awardState == MixServerCampaign.Def_AwardState_Got:
- if queryType == ShareDefine.Def_MSCGameServerQuery_QueryAward:
- recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \
- % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
- MixServerCampaign.Sync_MixServerCampaignAward(curPlayer, campaignType, awardState, recordData)
- GameWorld.DebugLog(" 已经领取过该奖励...")
- return
-
- #领奖的需要等待GameServer回包以后才处理下一个封包
- if queryType != ShareDefine.Def_MSCGameServerQuery_QueryAward:
- if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryMixServerAwardState) == 1:
- GameWorld.DebugLog(" 已经在查询中...")
- return
-
- curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryMixServerAwardState, 1)
-
- familyID = curPlayer.GetFamilyID()
-
- #[请求类型, 活动类型, 领取索引, 家族ID]
- msgList = [queryType, campaignType, awardIndex, familyID]
-
- GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'MixServerCampaignAward', \
- '%s' % (msgList), len(str(msgList)))
-
- GameWorld.DebugLog(" msgList=%s" % str(msgList))
- return
-
#===============================================================================
## 领取奖励表奖励
@@ -5358,7 +5389,7 @@
PlayerNewFairyCeremony.GetFCPartyAward(curPlayer, dataEx)
# 领取节日巡礼活动奖励
elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyAct:
- PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
+ PlayerFeastWeekParty.GetFeastWeekPartyActionAward(curPlayer, dataEx, dataExStr)
# 领取节日巡礼积分奖励
elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
@@ -5810,7 +5841,7 @@
PlayerControl.SendMailByKey('SubpackageDownload', [curPlayer.GetID()], awardItemList)
else:
for itemID, itemCnt, isBind in awardItemList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem])
+ ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
SyncPackDownloadAward(curPlayer)
return
--
Gitblit v1.8.0