From 5ad2bd52bfbdf91a93ecf3a6c98c5e578edabb2b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 26 三月 2019 17:18:50 +0800 Subject: [PATCH] 6373 【后端】【2.0】删除无用功能代码、封包、配置(页游天梯) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 468 ++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 258 insertions(+), 210 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 454db42..2d2d3e2 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 @@ -79,6 +77,8 @@ import GameLogic_FamilyWar import PlayerBossReborn import PlayerWeekParty +import PlayerFeastWeekParty +import PlayerActLogin import Operate_EquipWash import PlayerTreasure import GameLogic_GodArea @@ -101,6 +101,9 @@ import PlayerActTotalRecharge import PlayerSpringSale import PlayerFairyCeremony +import PlayerNewFairyCeremony +import PlayerFeastRedPacket +import PlayerLuckyTreasure import CrossRealmPlayer import ChNetSendPack import FamilyRobBoss @@ -110,6 +113,7 @@ import PlayerGeTui import PlayerDogz import PlayerCoat +import PlayerQuDaoDoubleBill import datetime import time @@ -132,10 +136,6 @@ #@return 返回值无意义 #@remarks 玩家登陆游戏初始化 def InitLoginPlayer(curPlayer, tick): - #初始化职业阶数,默认1 - if PlayerControl.GetJobRank(curPlayer) == 0: - PlayerControl.SetJobRank(curPlayer, 1) - ##初始化交易列表 if curPlayer.GetTradeList().GetTradeItemCount() == 0: curPlayer.GetTradeList().SetTradeListCount(ChConfig.Def_PlayerTradeMaxItemCount) @@ -224,6 +224,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 @@ -244,8 +283,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)) @@ -408,17 +455,29 @@ #---玩家上线, 宠物逻辑处理--- PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick) + PlayerFamily.FamilyPlayerOnLoginCross(curPlayer) + + PlayerTeam.OnPlayerLoginCrossServer(curPlayer) + #通知运行成功 curPlayer.BalanceServer_PlayerLoginInitOK() return + leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer) + if leaveServerSecond > ChConfig.Def_PlayerOfflineProtectTime / 1000: + # 离线超过离线保护重置切线临时保存的相关记录值 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayChangeLineID, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FuncChangeLineID, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HighChangeLineID, 0) + #GameWorld.DebugLog("离线超过10秒重置切线临时保存的相关记录值!leaveServerSecond=%s" % leaveServerSecond, curPlayer.GetPlayerID()) + # 离线过久恢复为非跨服状态 + if PlayerControl.GetCrossMapID(curPlayer): + PlayerControl.SetCrossMapID(curPlayer, 0) + SyncGuideState(curPlayer) #上线检查一次装备属性 - ItemControler.PlayerItemControler(curPlayer).CheckRolePackEquipAttr() - #上线检查加点属性点 - PlayerControl.FixOldAddPoint(curPlayer) - + ItemControler.PlayerItemControler(curPlayer).CheckRolePackEquipAttr() #更新服务器组ID PlayerControl.UpdPlayerServerGroupID(curPlayer) @@ -430,7 +489,6 @@ #通知玩家技能信息 __Sync_ClientSkill(curPlayer) - #清除生产采集Buff #PlayerControl.DelProduceBuff(curPlayer, tick) #清除国家答题Buff @@ -454,18 +512,6 @@ PlayerPrestigeSys.OnLogin(curPlayer) DataRecordPack.DR_PlayerLogin(curPlayer) EventReport.WriteEvent_login(curPlayer) - - - leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer) - if leaveServerSecond > ChConfig.Def_PlayerOfflineProtectTime / 1000: - # 离线超过离线保护重置切线临时保存的相关记录值 - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayChangeLineID, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FuncChangeLineID, 0) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HighChangeLineID, 0) - #GameWorld.DebugLog("离线超过10秒重置切线临时保存的相关记录值!leaveServerSecond=%s" % leaveServerSecond, curPlayer.GetPlayerID()) - # 离线过久恢复为非跨服状态 - if PlayerControl.GetCrossMapID(curPlayer): - PlayerControl.SetCrossMapID(curPlayer, 0) # 合服首登处理 __DoMixServerFirstLogin(curPlayer) @@ -484,11 +530,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) @@ -581,12 +627,6 @@ # 开服活动奖励信息 OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer) # -# # 通知合服奖励领取状态 -# PlayerMixLoginDayAward.OnLoginNotifyMixLoginDayAward(curPlayer) -# -# # 通知合服奖励 -# MixServerCampaign.OnMixServerCampaignLogin(curPlayer) -# # # 节日登陆奖励 # PlayerFestivalLogin.OnLoginFestivalLogin(curPlayer) @@ -596,21 +636,12 @@ GameLogic_GodArea.GodAreaOnLogin(curPlayer) # # 采集NPC次数通知 NPCCommon.SyncCollNPCTime(curPlayer) -# -# # 特惠活动 -# PlayerTeHui.PlayerLogin_TeHui(curPlayer) -# -# # 自定义商店 -# ShopItemManage.DoOnLogin(curPlayer) # # # 每日活跃度 PlayerActivity.OnLogin(curPlayer) # # # 副本进入时间 FBCommon.FBOnLogin(curPlayer) -# -# #天梯竞技场 -# HighLadderTube.OnLogin(curPlayer) # # #世界等级 PlayerWorldAverageLv.OnLogin(curPlayer) @@ -674,6 +705,7 @@ PlayerRune.PlayerRuneLogin(curPlayer) # 仙盟红包登录通知 PlayerFamilyRedPacket.OnPlayerLogin(curPlayer) + PlayerFeastRedPacket.DoPlayerOnLogin(curPlayer) # 法宝登录通知 PlayerMagicWeapon.PlayerMagicWeaponLogin(curPlayer) # 商店物品购买次数登录通知 @@ -701,8 +733,14 @@ PlayerBossReborn.OnLogin(curPlayer) # 周狂欢活动 PlayerWeekParty.OnLogin(curPlayer) + # 节日巡礼活动 + PlayerFeastWeekParty.OnLogin(curPlayer) + # 登录奖励活动 + PlayerActLogin.OnLogin(curPlayer) # 仙界盛典活动 PlayerFairyCeremony.OnLogin(curPlayer) + # 新仙界盛典活动 + PlayerNewFairyCeremony.OnLogin(curPlayer) # 分支下载奖励记录通知 SyncPackDownloadAward(curPlayer) # 登录触发功能开启(老号处理) @@ -715,6 +753,8 @@ PlayerBindJadeWheel.OnLogin(curPlayer) # 许愿池 PlayerWishingWell.OnLogin(curPlayer) + #幸运鉴宝 + PlayerLuckyTreasure.OnLogin(curPlayer) # 上线查询一次充值订单 curPlayer.SendDBQueryRecharge() # 小助手 @@ -734,6 +774,7 @@ # 如果被禁言的,上线同步前端 if curPlayer.GetGMForbidenTalk(): curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, curPlayer.GetGMForbidenTalk(), False) + return @@ -757,37 +798,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 #--------------------------------------------------------------------- @@ -917,11 +978,22 @@ #@return 返回值无意义 #@remarks 通知玩家技能信息 def __Sync_ClientSkill(curPlayer): + sendPack = ChPyNetSendPack.tagMCPlayerSkills() + sendPack.Clear() + sendPack.Skills = [] skillManager = curPlayer.GetSkillManager() for i in range(skillManager.GetSkillCount()): curSkill = skillManager.GetSkillByIndex(i) - curSkill.Sync_Skill() + #curSkill.Sync_Skill() + skillInfo = ChPyNetSendPack.tagPlayerSkill() + skillInfo.SkillID = curSkill.GetSkillID() + skillInfo.RemainTime = curSkill.GetRemainTime() + skillInfo.Proficiency = curSkill.GetProficiency() + + sendPack.Skills.append(skillInfo) + sendPack.Count = len(sendPack.Skills) + NetPackCommon.SendFakePack(curPlayer, sendPack) return #--------------------------------------------------------------------- @@ -1016,6 +1088,7 @@ #刷新玩家的视野 if not GameWorld.IsCrossServer() and PlayerControl.GetCrossMapID(curPlayer): GameWorld.DebugLog("===登录本服地图时,处于跨服状态,不刷新视野!", curPlayer.GetPlayerID()) + curPlayer.SetSight(0) else: PlayerState.ChangePlayerSigh(curPlayer, tick) @@ -1244,6 +1317,15 @@ curPack.SetCount(ChConfig.Def_PackCnt_DogzEquip) curPack.Sync_PackCanUseCount() + #初始化诛仙物品背包 + curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem) + curPack.SetCount(ChConfig.Def_PackCnt_ZhuXianItem) + curPack.Sync_PackCanUseCount() + #初始化诛仙装备背包 + curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip) + curPack.SetCount(ChConfig.Def_PackCnt_ZhuXianEquip) + curPack.Sync_PackCanUseCount() + #初始化临时交换背包 curPack = itemManager.GetPack(ShareDefine.rptTempSwap) curPack.SetCount(ChConfig.Def_PackCnt_TempSwap) @@ -1254,7 +1336,7 @@ #设置装备实际个数 curPack = itemManager.GetPack(IPY_GameWorld.rptEquip) - curPack.SetCount(ShareDefine.retMax) + curPack.SetCount(ChConfig.Def_PackCnt_Equip) #初始化垃圾桶 #curPack = itemManager.GetPack(IPY_GameWorld.rptRecycle) @@ -1499,9 +1581,6 @@ #防止玩家读取地图时未触发OnDay,读取地图后再次验证(2009.9.11) PlayerEventCounter.UpdatePlayerLoginTime(curPlayer) - #特惠活动事件 - #PlayerTeHui.PlayerLoadMapOK(curPlayer) - #设置阵营 if curPlayer.GetFaction() != ChConfig.CampType_Neutral \ and FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) not in ChConfig.Def_MapID_NeedCamp: @@ -1528,6 +1607,8 @@ #EndLoadMap需放在最后 curPlayer.EndLoadMap() + # 渠道返利 + PlayerQuDaoDoubleBill.OnMapQDDoubleBill(curPlayer) return True ## 切换地图同步一次PK模式 @@ -1646,80 +1727,103 @@ #@return 返回值无意义 #@remarks //03 01 加属性点#tagCAddPoint def AddPoint(index, tick): - GameWorld.GetPsycoFunc(__Func_AddPoint)(index, tick) return -##//03 01 加属性点#tagCAddPoint -#@param index 玩家索引 -#@param tick 时间戳 -#@return 返回值无意义 -#@remarks //03 01 加属性点#tagCAddPoint -def __Func_AddPoint(index, tick): +#// B2 06 玩家加点 #tagCMAddPoint +# +#struct tagCMAddPoint +#{ +# tagHead Head; +# BYTE PointAttrIDCount; // 加点属性ID个数 +# BYTE PointAttrIDList[PointAttrIDCount]; // 加点属性ID列表 +# WORD PointValueList[PointAttrIDCount]; // 加点属性ID对应的点数列表 +#}; +def OnAddPoint(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - playerControl = PlayerControl.PlayerControl(curPlayer) - #JobQuotiety = PlayerControl.JobQuotiety + pointAttrIDList = clientData.PointAttrIDList + pointValueList = clientData.PointValueList + if not pointAttrIDList or not pointValueList or len(pointAttrIDList) != len(pointValueList): + return + + needTotalPoint = 0 + for i, attrID in enumerate(pointAttrIDList): + if not IpyGameDataPY.GetIpyGameData("RolePoint", attrID): + return + needTotalPoint += pointValueList[i] + curFreePoint = curPlayer.GetFreePoint() - #job = curPlayer.GetJob() - recvAddPoint = IPY_GameWorld.IPY_CAddPoint() - addValue = recvAddPoint.GetPoint() - - #检验是否能够加点 - if addValue < 1 or addValue > curFreePoint: - #检验不通过, 返回 - #GameWorld.ErrLog("(%s,%s)检验是否能够加点,检验不通过, 返回"%(addValue,curFreePoint) , curPlayer.GetPlayerID()) + if needTotalPoint > curFreePoint: + GameWorld.DebugLog("剩余点数不足! curFreePoint(%s) < needTotalPoint(%s)" % (curFreePoint, needTotalPoint)) return - #封包加点类型 - addPointType = recvAddPoint.GetType() - - #加点 - if addPointType == ShareDefine.Def_Effect_STR: - curPlayer.SetBaseSTR(addValue + curPlayer.GetBaseSTR()) + curPlayer.SetFreePoint(curFreePoint - needTotalPoint) + for i, attrID in enumerate(pointAttrIDList): + addPoint = pointValueList[i] + curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID) + updPoint = curPoint + addPoint + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AddPointValue % attrID, updPoint) + GameWorld.DebugLog("玩家加点: attrID=%s,curPoint=%s,addPoint=%s,updPoint=%s" % (attrID, curPoint, addPoint, updPoint)) - elif addPointType == ShareDefine.Def_Effect_PNE: - curPlayer.SetBasePNE(addValue + curPlayer.GetBasePNE()) - - elif addPointType == ShareDefine.Def_Effect_PHY: - curPlayer.SetBasePHY(addValue + curPlayer.GetBasePHY()) - - elif addPointType == ShareDefine.Def_Effect_CON: - curPlayer.SetBaseCON(addValue + curPlayer.GetBaseCON()) - - else: - #异常超出边界 - GameWorld.ErrLog("AddPoint GetTypeErr = %s" % (addPointType) , curPlayer.GetID()) - return - - curPlayer.SetFreePoint(curFreePoint - addValue) - - DataRecordPack.DR_Freepoint(curPlayer, "AddPoint", curFreePoint, {"AddPointType":addPointType}) - playerControl.RefreshPlayerAttrState() - + NotifyPlayerBasePoint(curPlayer, pointAttrIDList) + playerControl = PlayerControl.PlayerControl(curPlayer) + playerControl.RefreshPlayerAttrState() return -def NotifyPlayerBasePoint(curPlayer): - #上线通知基础属性点 - notifyList = [] - notifyBasePointDict = { - IPY_GameWorld.CDBPlayerRefresh_BaseSTR:'BaseSTR', - IPY_GameWorld.CDBPlayerRefresh_BasePHY:'BasePHY', - IPY_GameWorld.CDBPlayerRefresh_BaseCON:'BaseCON', - IPY_GameWorld.CDBPlayerRefresh_BasePNE:'BasePNE', - } - for refreshType, keyStr in notifyBasePointDict.items(): - notifyStruct = ChPyNetSendPack.tagRefreshType() - notifyStruct.RefreshType = refreshType - notifyStruct.Value = getattr(curPlayer, 'Get%s'%keyStr)() - notifyList.append(notifyStruct) +def NotifyPlayerBasePoint(curPlayer, syncAttrIDList=[]): + # 通知基础属性点,已分配的自由点数 + + if not syncAttrIDList: + ipyDataMgr = IpyGameDataPY.IPY_Data() + syncAttrIDList = [ipyDataMgr.GetRolePointByIndex(index).GetAttrID() for index in xrange(ipyDataMgr.GetRolePointCount())] - #属性组合包 通知自己 - sendPack = ChPyNetSendPack.tagObjInfoListRefresh() + pointAttrIDList = [] + pointValueList = [] + for attrID in syncAttrIDList: + curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID) + pointAttrIDList.append(attrID) + pointValueList.append(curPoint) + + pointInfo = ChPyNetSendPack.tagMCRolePointInfo() + pointInfo.PointAttrIDList = pointAttrIDList + pointInfo.PointValueList = pointValueList + pointInfo.PointAttrIDCount = len(pointAttrIDList) + NetPackCommon.SendFakePack(curPlayer, pointInfo) + 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.ObjID = curPlayer.GetID() + sendPack.ID = curPlayer.GetID() sendPack.ObjType = curPlayer.GetGameObjType() - sendPack.Count = len(notifyList) - sendPack.RefreshType = notifyList - NetPackCommon.SendFakePack(curPlayer, sendPack) + sendPack.PosX = clientData.PosX + sendPack.PosY = clientData.PosY + sendPack.MoveType = clientData.MoveType + + PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1) return #=============================================================================== @@ -1753,7 +1857,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() @@ -5132,81 +5244,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 - #=============================================================================== ## 领取奖励表奖励 @@ -5270,9 +5307,6 @@ # 首充礼包奖励 elif rewardType == ChConfig.Def_RewardType_GoldGiftFirst: PlayerGoldGift.GetPlayerGoldGiftFirst(curPlayer) - # 领取法宝之魂奖励 - elif rewardType == ChConfig.Def_RewardType_MWSoulAward: - PlayerMagicWeapon.GetMWSoulAward(curPlayer, dataEx) # 领取极品白拿 elif rewardType == ChConfig.Def_RewardType_FreeGoods: PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx) @@ -5309,7 +5343,21 @@ # 领取周狂欢积分奖励 elif rewardType == ChConfig.Def_RewardType_WeekPartyPoint: PlayerWeekParty.GetWeekPartyPointAward(curPlayer, dataEx, dataExStr) - + # 领取登录奖励活动奖励 + elif rewardType == ChConfig.Def_RewardType_ActLoginAwardAct: + PlayerActLogin.GetLoginAwardActionAward(curPlayer, dataEx, dataExStr) + # 领取新仙界盛典充值大礼 + elif rewardType == ChConfig.Def_RewardType_NewFairyCRecharge: + PlayerNewFairyCeremony.GetFCRechargeAward(curPlayer) + # 领取新仙界盛典全民来嗨 + elif rewardType == ChConfig.Def_RewardType_NewFairyCParty: + PlayerNewFairyCeremony.GetFCPartyAward(curPlayer, dataEx) + # 领取节日巡礼活动奖励 + elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyAct: + PlayerFeastWeekParty.GetFeastWeekPartyActionAward(curPlayer, dataEx, dataExStr) + # 领取节日巡礼积分奖励 + elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint: + PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr) return @@ -5758,7 +5806,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