From a7ab0247c7b8eff06ad104bee39bc035384ca43e Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 23 七月 2025 12:08:22 +0800 Subject: [PATCH] 80 【常规】背包-服务端(增加背包购买格子;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 229 ++++++++++++++++++++++---------------------------------- 1 files changed, 91 insertions(+), 138 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 07fb987..fbcc07c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -38,7 +38,6 @@ import PlayerGameWallow import NetPackCommon import ChPyNetSendPack -import Operate_PlayerBuyZhenQi import DataRecordPack import PlayerBillboard import UpdatePlayerName @@ -51,18 +50,15 @@ import PlayerFamily import PlayerLoginDayAward import PlayerGodWeapon -import PlayerWorldAverageLv import PlayerGoldInvest import PlayerActivity import FBCommon import BossHurtMng import PlayerWishingWell -import PlayerAttrFruit import PlayerSuccess import PlayerDienstgrad import PlayerFreeGoods import PlayerRecover -import GameLogic_IceLode import GameLogic_SkyTower import PlayerEquipDecompose import PlayerGreatMaster @@ -172,7 +168,11 @@ import IPY_ServerDefine import CommFunc from PyMongoDB import RecvPackToMapDB +import PyMongoMain import PlayerTalk +import PlayerHero +import PlayerOnline +import TurnAttack import datetime import time @@ -196,6 +196,7 @@ #@return 返回值无意义 #@remarks 玩家登陆游戏初始化 def InitLoginPlayer(curPlayer, tick): + PlayerOnline.OnPlayerLogin(curPlayer) #初始化玩家的时钟个数 if curPlayer.GetTickTypeCount() == 0: curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count) @@ -479,8 +480,6 @@ curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr()) #初始化玩家背包 InitPlayerPack(curPlayer) - #通知玩家物品信息 - __Sync_PackDetel(curPlayer) if GameWorld.IsCrossServer(): SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick) @@ -507,6 +506,7 @@ if PlayerControl.GetCrossMapID(curPlayer): PlayerControl.SetCrossMapID(curPlayer, 0) + TurnAttack.OnPlayerLogin(curPlayer) SyncGuideState(curPlayer) #上线检查一次装备属性 @@ -527,9 +527,6 @@ #通知玩家的buff __Sync_ClientBuff(curPlayer) - - #初始化现实时间物品 - InitRealityTimeItem(curPlayer, tick) #---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷 DoPlayerLoginInMap(curPlayer, tick) @@ -559,9 +556,6 @@ #PK模式 SyncPKModel(curPlayer) - - #装备相关信息 - ChEquip.OnPlayerEquipLoginLogic(curPlayer) #大师 PlayerGreatMaster.MasterOnLogin(curPlayer) @@ -576,9 +570,6 @@ PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick) PlayerPet.OnPlayerPetLogin(curPlayer) - #清空玩家万能背包中的任务物品 - ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere) - #PlayerLoginNotify(curPlayer, tick) #防沉迷计算下线累积时间 @@ -591,9 +582,6 @@ # 首充/天天首充/充值豪礼 PlayerGoldGift.OnLogin(curPlayer) - #通知购买功能中各购买类型的已购买和可购买次数 - Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer) -# # #通知功能首次触发情况 GameFuncComm.Sync_FuncOpenState(curPlayer) # @@ -643,14 +631,8 @@ # 副本进入时间 FBCommon.FBOnLogin(curPlayer) - #世界等级 - PlayerWorldAverageLv.OnLogin(curPlayer) - # 投资理财 PlayerGoldInvest.OnLogin(curPlayer) - - #属性果实使用情况 - PlayerAttrFruit.AttrFruitOnLogin(curPlayer) #成就 PlayerSuccess.SuccOnLogin(curPlayer) @@ -872,6 +854,8 @@ pass else: + PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer) + PlayerHero.OnPlayerLogin(curPlayer) PlayerMail.OnPlayerLogin(curPlayer) PlayerChatBox.OnPlayerLogin(curPlayer) PlayerFace.OnPlayerLogin(curPlayer) @@ -922,19 +906,19 @@ #---补满血满魔--- GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer)) - curPlayer.SetMP(curPlayer.GetMaxMP()) + #curPlayer.SetMP(curPlayer.GetMaxMP()) #默认触发一次功能开启 if curPlayer.GetLV() == 1: GameFuncComm.DoFuncOpenLogic(curPlayer) #初始化组队状态 - autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1) - autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2) - PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck)) + #autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1) + #autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2) + #PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck)) #玩家默认恶名值 - curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue) + #curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue) #curPlayer.SetDict("ThunderLogin", 1) #记录第一次登陆 @@ -945,6 +929,8 @@ for mailTypeKey, mailItemList in mailList: PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList) + PlayerHero.OnPlayerFirstLogin(curPlayer) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1) return @@ -1091,18 +1077,6 @@ rolePack = itemManager.GetPack(packIndex) rolePack.Sync_Refresh() - # 刷下装备评分,仓库可以暂不处理,取出装备后登录触发刷新 - for i in xrange(rolePack.GetCount()): - curItem = rolePack.GetAt(i) - if curItem.IsEmpty(): - continue - newScore = ItemCommon.CalcEquipGS(curItem) - hisScore = ItemCommon.GetEquipGearScore(curItem) - if hisScore != newScore: - ItemCommon.SetEquipGearScore(curItem, newScore) - GameWorld.Log("登录更新装备评分: packType=%s,i=%s,hisScore=%s,newScore=%s,itemID=%s,guid=%s" - % (packIndex, i, hisScore, newScore, curItem.GetItemTypeID(), curItem.GetGUID()), curPlayer.GetPlayerID()) - for packIndex in ChConfig.Def_VPackCnt_Dict.keys(): ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex) @@ -1133,16 +1107,6 @@ # #itemManager.GetPack(IPY_GameWorld.rptBreakPrepare).Sync_Refresh() # #itemManager.GetPack(IPY_GameWorld.rptBreakItem).Sync_Refresh() #=============================================================================== - return - -#--------------------------------------------------------------------- -##初始化现实时间物品 -#@param curPlayer 玩家实例 -#@param tick 时间戳 -#@return 返回值无意义 -#@remarks 初始化现实时间物品 -def InitRealityTimeItem(curPlayer, tick): - PlayerState.ProcessTimeEquip(curPlayer, tick) return #--------------------------------------------------------------------- @@ -1264,25 +1228,29 @@ if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: #副本地图上线切换才加无敌buff SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick) - - #刷新玩家的视野 - if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)): - GameWorld.DebugLog("===登录本服地图时,处于跨服或自定义场景状态,不刷新视野!", curPlayer.GetPlayerID()) + + #卡牌改为0视野 + if curPlayer.GetSightLevel() != curPlayer.GetID(): PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID()) - elif not GameWorld.IsCrossServer(): - realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer) - if realmDifficulty: - GameWorld.DebugLog("===登录本服地图时,处于境界难度地图,自动设置难度! realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID()) - PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty) - + if curPlayer.GetSight() != 0: + PlayerControl.SetSight(curPlayer, 0) + #刷新玩家的视野 + #if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)): + # GameWorld.DebugLog("===登录本服地图时,处于跨服或自定义场景状态,不刷新视野!", curPlayer.GetPlayerID()) + # PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID()) + #elif not GameWorld.IsCrossServer(): + # realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer) + # if realmDifficulty: + # GameWorld.DebugLog("===登录本服地图时,处于境界难度地图,自动设置难度! realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID()) + # PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty) + PlayerState.ChangePlayerSigh(curPlayer, tick) if GameWorld.IsCrossServer(): curPlayer.SetForbiddenSyncClientState(False) - playerControl = PlayerControl.PlayerControl(curPlayer) - #刷新所有状态 - playerControl.ReCalcAllState() + olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer) + olPlayer.ReCalcAllAttr() if GameWorld.IsCrossServer(): curPlayer.SetForbiddenSyncClientState(True) @@ -1468,54 +1436,63 @@ #@return 返回值无意义 #@remarks 初始化玩家背包 def InitPlayerPack(curPlayer) : - itemManager = curPlayer.GetItemManager() + + #设置装备实际个数,默认最大个数 + PlayerControl.Init_PackCount(curPlayer, IPY_GameWorld.rptEquip, defaultMax=True, isSync=False) #初始化玩家背包 - PlayerControl.Init_ItemPack(curPlayer) + PlayerControl.Init_PackCount(curPlayer, IPY_GameWorld.rptItem) #初始化玩家仓库 - PlayerControl.Init_Warehouse(curPlayer) + #PlayerControl.Init_Warehouse(curPlayer) + + #初始化鉴定背包,默认最大个数用于存放主线掉落 + PlayerControl.Init_PackCount(curPlayer, IPY_GameWorld.rptIdentify, defaultMax=True) + + #初始化英雄背包 + PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptHero) + + #初始化临时交换背包,默认最大个数 + PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTempSwap, defaultMax=True, isSync=False) + + #初始化临时存放背包,默认最大个数 + PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTempItem, defaultMax=True, isSync=False) #初始化寻宝背包 - PlayerControl.Init_TreasurePack(curPlayer) + PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTreasure) #初始化神兽物品背包 - curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem) - curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem)) - curPack.Sync_PackCanUseCount() + #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem) + #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem)) + #curPack.Sync_PackCanUseCount() #初始化神兽装备背包 - curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip) - curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip)) - curPack.Sync_PackCanUseCount() + #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip) + #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip)) + #curPack.Sync_PackCanUseCount() #初始化垃圾分类背包 - curPack = itemManager.GetPack(ShareDefine.rptGarbage) - curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage)) - curPack.Sync_PackCanUseCount() - - #初始化临时交换背包 - curPack = itemManager.GetPack(ShareDefine.rptTempSwap) - curPack.SetCount(ChConfig.Def_PackCnt_TempSwap) - - #初始化临时存放背包 - curPack = itemManager.GetPack(ShareDefine.rptTempItem) - curPack.SetCount(ChConfig.Def_PackCnt_TempItem) - - #设置装备实际个数 - curPack = itemManager.GetPack(IPY_GameWorld.rptEquip) - curPack.SetCount(ItemCommon.GetPackInitCount(IPY_GameWorld.rptEquip)) + #curPack = itemManager.GetPack(ShareDefine.rptGarbage) + #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage)) + #curPack.Sync_PackCanUseCount() #初始化垃圾桶 #curPack = itemManager.GetPack(IPY_GameWorld.rptRecycle) #curPack.SetCount(ChConfig.Def_PackCnt_Recycle) #初始化万能背包 - curPack = itemManager.GetPack(IPY_GameWorld.rptAnyWhere) - curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount) + #curPack = itemManager.GetPack(IPY_GameWorld.rptAnyWhere) + #curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount) #初始化宠物背包 - curPack = itemManager.GetPack(ShareDefine.rptPet) - curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptPet)) + #curPack = itemManager.GetPack(ShareDefine.rptPet) + #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptPet)) #curPack.Sync_PackCanUseCount() + + ItemCommon.SyncPackBuyCnt(curPlayer) + + #通知玩家物品信息 + __Sync_PackDetel(curPlayer) + + ItemControler.CheckGiveBindMoneyTypeItem(curPlayer) return #--------------------------------------------------------------------- @@ -1604,16 +1581,21 @@ #将玩家放置在这个地图上 curPlayer.InitPos(curPlayer.GetPosX(), curPlayer.GetPosY()) - #刷新自己的视野 - if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)): - GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID()) + #卡牌改为0视野 + if curPlayer.GetSightLevel() != curPlayer.GetID(): PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID()) - elif not GameWorld.IsCrossServer(): - realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer) - if realmDifficulty: - GameWorld.DebugLog("===本服LoadMapOK时玩家处于境界难度地图,自动设置难度!realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID()) - PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty) - + if curPlayer.GetSight() != 0: + PlayerControl.SetSight(curPlayer, 0) + #刷新自己的视野 + #if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)): + # GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID()) + # PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID()) + #elif not GameWorld.IsCrossServer(): + # realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer) + # if realmDifficulty: + # GameWorld.DebugLog("===本服LoadMapOK时玩家处于境界难度地图,自动设置难度!realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID()) + # PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty) + curPlayer.RefreshView() curPlayer.SetVisible(True) @@ -1740,7 +1722,6 @@ PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer) PlayerYinji.OnLoadMap(curPlayer) - ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount() # 刷新装备珍品星级 #EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK curPlayer.EndLoadMap() @@ -1832,7 +1813,7 @@ NotifyPlayerBasePoint(curPlayer, pointAttrIDList) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() - PlayerControl.SetLingGenMaxIndex(curPlayer) + #PlayerControl.SetLingGenMaxIndex(curPlayer) return #// B2 07 重置加点 #tagCMResetAttrPoint @@ -2418,6 +2399,9 @@ #离线session EventReport.WriteEvent_session(curPlayer) + + #需放最后 + PlayerOnline.OnPlayerLogoff(curPlayer) return #--------------------------------------------------------------------- @@ -3405,7 +3389,7 @@ #参考经验 rExp = PlayerControl.GetPlayerReExp(curPlayer) reLV = curPlayer.GetLV() #参考等级 - worldLvExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) #世界等级经验加成 + worldLvExpRate = 0 #经验公式 redeemExp = int(eval(recList[1])) @@ -3456,34 +3440,6 @@ # @param tick: 时间戳 # @return: None def ReceiveFamilyArrestAward(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - arrestID = clientData.ArrestID - - bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID) - if bit == None: - #没有这个家族悬赏任务 - GameWorld.DebugLog("没有这个家族悬赏任务 arrestID=%s" % arrestID) - return - - receiveState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState) - - if receiveState & pow(2, bit): - #该任务奖励已经领取 - GameWorld.DebugLog("该任务奖励已经领取 arrestID=%s" % arrestID) - return - - if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyArrestQueryState) == 1: - #已经在查询中, 不重复查询 - GameWorld.DebugLog("已经在查询中, 不重复查询 arrestID=%s" % arrestID) - return - - sendMsg = '%s' % arrestID - - #向GameServer请求该悬赏任务是否已经完成 - curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyArrest, 0, 'FamilyArrestAward', sendMsg, len(sendMsg)) - - #设置状态查询中 - curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 1) return @@ -3621,9 +3577,6 @@ # 功能开启奖励 elif rewardType == ChConfig.Def_RewardType_OpenFunc: GameFuncComm.GetFuncOpenAward(curPlayer, dataEx) - # 冰晶矿脉星级奖励 - elif rewardType == ChConfig.Def_RewardType_IceLodeStar: - GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx) # 领取周狂欢活动奖励 elif rewardType == ChConfig.Def_RewardType_WeekPartyAct: PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr) @@ -4364,7 +4317,7 @@ # WORD RealmDifficulty; //境界难度 = 1000 + 所选境界等级,如境界13,则发1013 #}; def OnSelectRealmDifficulty(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty) + #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + #PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty) return -- Gitblit v1.8.0