From 912176de9ed5b45e5fe0edbb15b8796f54c56ba2 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 25 八月 2025 19:26:52 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(武将表、NPC表 增加性别)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py |  450 +++++++++++++------------------------------------------
 1 files changed, 107 insertions(+), 343 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 1678a8b..2b212c8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -19,7 +19,6 @@
 import ChConfig
 import BuffSkill
 import PlayerEventCounter
-import PlayerTeam
 import PlayerHorse
 import NPCCommon
 import SkillCommon
@@ -38,7 +37,6 @@
 import PlayerGameWallow
 import NetPackCommon
 import ChPyNetSendPack
-import Operate_PlayerBuyZhenQi
 import DataRecordPack
 import PlayerBillboard
 import UpdatePlayerName
@@ -51,33 +49,18 @@
 import PlayerFamily
 import PlayerLoginDayAward
 import PlayerGodWeapon
-import PlayerWorldAverageLv
 import PlayerGoldInvest
 import PlayerActivity
 import FBCommon
-import PlayerBindJadeWheel
-import BossHurtMng
 import PlayerWishingWell
-import PlayerAttrFruit
 import PlayerSuccess
 import PlayerDienstgrad
 import PlayerFreeGoods
 import PlayerRecover
-import GameLogic_IceLode
-import GameLogic_SkyTower
 import PlayerEquipDecompose
-import PlayerGreatMaster
-import PlayerGatherSoul
-import PlayerGatherTheSoul
-import PlayerFairyDomain
 import PlayerCrossRealmPK
 import PlayerCrossChampionship
-import PlayerCrossBattlefield
 import GameFuncComm
-import PlayerMagicWeapon
-import GameLogic_FamilyBoss
-import GameLogic_TrialTower
-import GameLogic_FamilyWar
 import PlayerBossReborn
 import PlayerWeekParty
 import PlayerFeastWeekParty
@@ -86,17 +69,12 @@
 import PlayerFeastWish
 import PlayerActLogin
 import PlayerTreasure
-import GameLogic_GodArea
 import PlayerRune
 import PlayerFamilyRedPacket
 import IpyGameDataPY
 import EventReport
 import OpenServerCampaign
-import PlayerVip
-import PlayerRefineStove
 import PassiveBuffEffMng
-import PlayerDiceEx
-import GameLogic_XMZZ
 import PlayerFlashSale
 import PlayerFlashGiftbag
 import PlayerDailyGiftbag
@@ -119,8 +97,6 @@
 import PlayerActHorsePetFeast
 import PlayerActBossTrial
 import PlayerSpringSale
-import PlayerFairyCeremony
-import PlayerNewFairyCeremony
 import GY_Query_BossFirstKill
 import PlayerCrossYaomoBoss
 import PlayerFeastRedPacket
@@ -134,9 +110,6 @@
 import PlayerTongTianLing
 import CrossRealmPlayer
 import ChNetSendPack
-import FamilyRobBoss
-import FBHelpBattle
-import PlayerAssist
 import PlayerArena
 import PyGameData
 import PlayerCoin
@@ -174,7 +147,11 @@
 import IPY_ServerDefine
 import CommFunc
 from PyMongoDB import RecvPackToMapDB
+import PyMongoMain
 import PlayerTalk
+import PlayerHero
+import PlayerOnline
+import TurnAttack
 
 import datetime
 import time
@@ -198,6 +175,7 @@
 #@return 返回值无意义
 #@remarks 玩家登陆游戏初始化
 def InitLoginPlayer(curPlayer, tick):
+    PlayerOnline.OnPlayerLogin(curPlayer)
     #初始化玩家的时钟个数
     if curPlayer.GetTickTypeCount() == 0:
         curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
@@ -216,37 +194,6 @@
     #刷新人物日期状态
     #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
     PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
-    return
-
-##非同一天二次登陆
-# @param curPlayer 玩家实例
-# @return None
-def NoteOtherDayLogin(curPlayer):
-    #记录过或者未登陆过 不记录
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_OtherDayLogin) != 1:
-        return
-    
-    logoffTimeStr = curPlayer.GetLogoffTime().strip()
-    loginTimeStr = curPlayer.GetLoginTime().strip()
-    #curTimeStr = GameWorld.GetCurrentDataTimeStr()
-    
-    #防范外部逻辑错误,或异常情况
-    if logoffTimeStr in ['', '0'] or loginTimeStr in ['', '0']:
-        return
-    
-    logoffTimeDate = GameWorld.GetDateTimeByStr(logoffTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day)
-    
-    #同一天不记录
-    if logoffTimeDate == GameWorld.GetDateTimeByStr(loginTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day):
-        return
-    
-    #GameWorld.Log("OtherDayLogin offtime = %s" % logoffTimeDate)
-    
-    DataRecordPack.DR_OtherDayLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
-    
-    #标记为已记录
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 2)
-    
     return
 
 #// A1 20 货币兑换 #tagCMMoneyExchange
@@ -480,7 +427,6 @@
 def DoPlayerLogin(curPlayer, tick):
     #这里只做初始化逻辑
     curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 0) # 每次登录重置
     
     #通知时间
     Sync_PyServerDataTimeToClient(curPlayer)
@@ -513,8 +459,6 @@
     curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
     #初始化玩家背包
     InitPlayerPack(curPlayer)
-    #通知玩家物品信息
-    __Sync_PackDetel(curPlayer)
     
     if GameWorld.IsCrossServer():
         SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
@@ -526,8 +470,6 @@
         EventReport.WriteEvent_login(curPlayer)
         #---玩家上线, 宠物逻辑处理---
         PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
-        
-        PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
         return
     
     leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer)
@@ -540,7 +482,10 @@
         # 离线过久恢复为非跨服状态
         if PlayerControl.GetCrossMapID(curPlayer):
             PlayerControl.SetCrossMapID(curPlayer, 0)
-        
+            
+    __FirstLoginOnEnter(curPlayer)
+    
+    TurnAttack.OnPlayerLogin(curPlayer)
     SyncGuideState(curPlayer)
     
     #上线检查一次装备属性
@@ -556,16 +501,11 @@
     
     #通知玩家技能信息
     __Sync_ClientSkill(curPlayer)
-    #清除国家答题Buff
-    #PlayerExam.DoLogic_ExitExam(curPlayer, tick, needRefresh = False)
     #清除VIPbuff
     #BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_VIPExp_SkillTypeID, tick)
     
     #通知玩家的buff
     __Sync_ClientBuff(curPlayer)
-    
-    #初始化现实时间物品
-    InitRealityTimeItem(curPlayer, tick)
     
     #---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷
     DoPlayerLoginInMap(curPlayer, tick)
@@ -577,14 +517,11 @@
     PlayerPrestigeSys.OnLogin(curPlayer)
     #DataRecordPack.DR_PlayerLogin(curPlayer)
     EventReport.WriteEvent_login(curPlayer)
-            
+    
     # 合服首登处理
     __DoMixServerFirstLogin(curPlayer)
     PlayerBillboard.BillboardOnLogin(curPlayer)
     
-    #非同一天二次登陆, 应该放在该函数中的SetLoginTime之后
-    NoteOtherDayLogin(curPlayer)
-        
     #上线时通知脱机挂时被击杀的离线时间
     __Sync_PlayerOffline(curPlayer, tick)
     
@@ -596,27 +533,10 @@
     
     #PK模式
     SyncPKModel(curPlayer)
-        
-    #装备相关信息
-    ChEquip.OnPlayerEquipLoginLogic(curPlayer)
-    
-    #大师
-    PlayerGreatMaster.MasterOnLogin(curPlayer)
-    
-    #通知VIP
-    PlayerVip.DoOnLogin(curPlayer, tick)
-    
-    #通知法宝精炼等级
-    PlayerRefineStove.DoOnLogin(curPlayer, tick)
     
     #---玩家上线, 宠物逻辑处理---
     PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
     PlayerPet.OnPlayerPetLogin(curPlayer)
-    
-    __FirstLoginOnEnter(curPlayer)
-    
-    #清空玩家万能背包中的任务物品
-    ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
     
     #PlayerLoginNotify(curPlayer, tick)
     
@@ -630,9 +550,6 @@
     # 首充/天天首充/充值豪礼
     PlayerGoldGift.OnLogin(curPlayer)
     
-    #通知购买功能中各购买类型的已购买和可购买次数
-    Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer)
-#    
 #    #通知功能首次触发情况
     GameFuncComm.Sync_FuncOpenState(curPlayer)
 #    
@@ -641,13 +558,6 @@
     
     #通知玩家死亡时间
     PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer)
-    #ClearPlayerDeadInfo(curPlayer)
-    
-    #充值活动玩家登入处理
-    #PlayerGoldAction.DoLogic_PlayerOnLogin(curPlayer)
-    
-    # 提示贵宾俱乐部信息
-    #PlayerVip.NoteVIPClubInfo(curPlayer)
     
     #角色改名次数
     UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer)
@@ -668,11 +578,7 @@
     
     # 开服活动奖励信息
     OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer)
-
-    # 试炼之塔
-    GameLogic_TrialTower.OnFBPlayerLogin(curPlayer)
-    # 古神禁地
-    GameLogic_GodArea.GodAreaOnLogin(curPlayer)
+    
     # 采集NPC次数通知
     NPCCommon.SyncCollNPCTime(curPlayer)
     
@@ -682,14 +588,8 @@
     # 副本进入时间
     FBCommon.FBOnLogin(curPlayer)
     
-    #世界等级
-    PlayerWorldAverageLv.OnLogin(curPlayer)
-    
     # 投资理财
     PlayerGoldInvest.OnLogin(curPlayer)
-    
-    #属性果实使用情况
-    PlayerAttrFruit.AttrFruitOnLogin(curPlayer)
     
     #成就
     PlayerSuccess.SuccOnLogin(curPlayer)
@@ -717,7 +617,6 @@
     # 跨服PK
     PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
     PlayerCrossChampionship.DoPlayerLogin(curPlayer)
-    PlayerCrossBattlefield.DoPlayerLogin(curPlayer)
     
     # 幸运云购
     PlayerLuckyCloudBuy.OnPlayerLogin(curPlayer)
@@ -759,31 +658,21 @@
     PlayerActFamilyCTGAssist.OnPlayerLogin(curPlayer)
     #集字活动
     PlayerActCollectWords.OnPlayerLogin(curPlayer)
-    # 世界boss
-    BossHurtMng.OnLogin(curPlayer)
     ChItem.Sync_ItemDayUseCnt(curPlayer)
     # 符印登录通知
     PlayerRune.PlayerRuneLogin(curPlayer)
     # 仙盟红包登录通知
     PlayerFamilyRedPacket.OnPlayerLogin(curPlayer)
     PlayerFeastRedPacket.DoPlayerOnLogin(curPlayer)
-    # 法宝登录通知
-    PlayerMagicWeapon.PlayerMagicWeaponLogin(curPlayer)
     # 商店物品购买次数登录通知
     FunctionNPCCommon.ShopItemOnLogin(curPlayer)
     # 通知设置的被动功法
     #PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
-    #我要太极
-    PlayerDiceEx.DiceExOnLogin(curPlayer)
-    #仙魔之争
-    GameLogic_XMZZ.OnXMZZLogin(curPlayer)
     PlayerOnlinePrize.OnPlayerLogin(curPlayer)
     #装备分解
     PlayerEquipDecompose.PlayerLogin(curPlayer)
     #防沉迷
     PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick)
-    # 协助
-    PlayerAssist.OnPlayerLogin(curPlayer)
     # 极品白拿
     PlayerFreeGoods.OnLogin(curPlayer)
     # BOSS复活活动
@@ -832,33 +721,18 @@
     PlayerActSingleRecharge.OnPlayerLogin(curPlayer)
     # 转盘活动
     PlayerActTurntable.OnPlayerLogin(curPlayer)
-    # 仙界盛典活动
-    PlayerFairyCeremony.OnLogin(curPlayer)
-    # 新仙界盛典活动
-    PlayerNewFairyCeremony.OnLogin(curPlayer)
     # 分支下载奖励记录通知
     SyncPackDownloadAward(curPlayer)
     # 登录触发功能开启(老号处理)
     GameFuncComm.DoFuncOpenLogic(curPlayer)
     # 神兽
     PlayerDogz.OnPlayerLogin(curPlayer)
-    # 骑宠
-    FamilyRobBoss.OnPlayerLogin(curPlayer)
-    # 绑玉转盘
-    PlayerBindJadeWheel.OnLogin(curPlayer)
     # 许愿池
     PlayerWishingWell.OnLogin(curPlayer)
     #幸运鉴宝
     PlayerLuckyTreasure.OnLogin(curPlayer)
     # 小助手
     SyncLittleHelper(curPlayer)
-    # 副本助战
-    FBHelpBattle.DoPlayerLogin(curPlayer)
-    # 聚魂
-    PlayerGatherSoul.PlayerLogin(curPlayer)
-    PlayerGatherTheSoul.OnPlayerLogin(curPlayer)
-    #缥缈仙域
-    PlayerFairyDomain.OnLogin(curPlayer)
     PlayerFB.OnLogin(curPlayer)
     #技能专精信息
     SkillShell.NotifyElementSkillInfo(curPlayer)
@@ -909,17 +783,14 @@
         该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
         旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
     '''
-    
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealLoginOK):
-        #切地图的不处理,切地图的也会触发该函数
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 1)
     GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
     
     if GameWorld.IsCrossServer():
         pass
     
     else:
+        PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
+        PlayerHero.OnPlayerLogin(curPlayer)
         PlayerMail.OnPlayerLogin(curPlayer)
         PlayerChatBox.OnPlayerLogin(curPlayer)
         PlayerFace.OnPlayerLogin(curPlayer)
@@ -956,9 +827,11 @@
     return
 
 def __FirstLoginOnEnter(curPlayer):
-    ## 首登处理,先return
-    return
+    ## 首登处理
+    
     playerID = curPlayer.GetID()
+    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FirstLogin):
+        return
     
     GameWorld.Log('玩家是第一次进入游戏', playerID)
     # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
@@ -968,24 +841,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)
-    
-    #标记已登陆过,用于非同一天二次登陆
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 1)
+    #curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
     
     #curPlayer.SetDict("ThunderLogin", 1)
     #记录第一次登陆
@@ -995,12 +863,14 @@
     mailList = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 2)
     for mailTypeKey, mailItemList in mailList:
         PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
+        
+    PlayerHero.OnPlayerFirstLogin(curPlayer)
+    
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
     return
 
-## 合服首登处理
-#  @param curPlayer
-#  @return None
 def __DoMixServerFirstLogin(curPlayer):
+    ## 合服首登处理
     isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
     if not isMixServer:
         return
@@ -1059,9 +929,6 @@
     
     # 同步排行榜
     PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
-    
-    # 天星塔全服过关记录
-    GameLogic_SkyTower.OnMixFirstLogin(curPlayer)
     
     # boss凭证
     PlayerActBossTrial.OnMixFirstLogin(curPlayer)
@@ -1142,18 +1009,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)
         
@@ -1184,16 +1039,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
 
 #---------------------------------------------------------------------
@@ -1315,25 +1160,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)
@@ -1519,54 +1368,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
 
 #---------------------------------------------------------------------
@@ -1655,16 +1513,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)
         
@@ -1714,9 +1577,7 @@
         #=======================================================================
             #此时已经是下马状态不需要刷状态 但是需要通知客户端下马
             PlayerHorse.PlayerRideHorseDown(curPlayer, False)
-        
-    PlayerTeam.PlayerLoginSetTeam(curPlayer, tick)
-    
+            
     #激活玩家(保证持续性Buff处理间隔)
     PlayerControl.SetIsNeedProcess(curPlayer, True)
 
@@ -1775,13 +1636,7 @@
         curPlayer.SetFaction(ChConfig.CampType_Neutral)
         BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Justice, tick)
         BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Evil, tick)
-    
-    
-    #再次请求双倍经验是否领取
-    #PlayerDoubleExpSys.ChangeMapAfter_CalcDoubleExpTime(curPlayer, tick)
-    
-    #PlayerVip.SetStartCalcVIPTick(curPlayer, tick)
-    
+        
     #强制切换PK模式
     initAttackModel = curMap.GetInitAttackModel()
     if curPlayer.GetAttackMode() != initAttackModel:
@@ -1791,7 +1646,6 @@
     
     PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
     PlayerYinji.OnLoadMap(curPlayer)
-    ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount()   # 刷新装备珍品星级
     
     #EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK
     curPlayer.EndLoadMap()
@@ -1883,7 +1737,7 @@
     NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
     playerControl = PlayerControl.PlayerControl(curPlayer)
     playerControl.RefreshPlayerAttrState()
-    PlayerControl.SetLingGenMaxIndex(curPlayer)
+    #PlayerControl.SetLingGenMaxIndex(curPlayer)
     return
 
 #// B2 07 重置加点 #tagCMResetAttrPoint
@@ -2392,28 +2246,6 @@
 def PlayerDisconnect(index, tick):
     GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
     return
-#---------------------------------------------------------------------
-
-##记录新增有效登陆玩家,登陆10分钟以上玩家才算有效
-# @param curPlayer 玩家实例
-# @return None
-def NoteLoginValid(curPlayer):
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_LoginValid) == 1:
-        #已记录
-        return
-    
-    #计算时间, 当前减去登陆时间
-    diffTime = GameWorld.GetCurrentTime() - GameWorld.GetDateTimeByStr(curPlayer.GetLoginTime().strip())
-    
-    #10分钟以上才算有效玩家
-    if diffTime.days == 0 and diffTime.seconds < 10 * 60:
-        return
-    
-    DataRecordPack.DR_LoginValid(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
-    
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LoginValid, 1)
-    return
-
 
 ##C++封包触发, 玩家下线
 #@param index 玩家索引
@@ -2463,11 +2295,6 @@
     #流向记录玩家下线
     DataRecordPack.DR_PlayerDisconnect(curPlayer)
     
-    #记录新增有效登陆玩家
-    NoteLoginValid(curPlayer)
-    
-    #VIP时间
-    #PlayerVip.CalcVIPTimeByTick(curPlayer, tick, False)
     #在线时间
     PlayerOnlinePrize.CalcOnlineTime(curPlayer)
     #首充提示时间
@@ -2494,6 +2321,9 @@
     
     #离线session
     EventReport.WriteEvent_session(curPlayer)
+    
+    #需放最后
+    PlayerOnline.OnPlayerLogoff(curPlayer)
     return
 
 #---------------------------------------------------------------------
@@ -3070,11 +2900,7 @@
                     return
                 
     elif rebornType == ChConfig.rebornType_UseItem:
-        if crossMapID == ChConfig.Def_FBMapID_CrossBattlefield:
-            rebornItemID = IpyGameDataPY.GetFuncCfg("CrossBattlefieldReborn", 1)
-            rebornItem = ItemCommon.FindItemInPackByItemID(curPlayer, rebornItemID, IPY_GameWorld.rptItem)
-        else:
-            rebornItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_Reborn)
+        rebornItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_Reborn)
         if not rebornItem:
             GameWorld.ErrLog("复活道具不足,无法原地复活! ", playerID)                
             return
@@ -3409,7 +3235,7 @@
 #  @param transportType 传送类型
 #  @return 是否vip等级限制
 def TransportVipLvRestrict(curPlayer, transportType):
-    return PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FreeTransport)
+    return 0
 
 
 
@@ -3481,7 +3307,7 @@
     #参考经验
     rExp = PlayerControl.GetPlayerReExp(curPlayer)
     reLV = curPlayer.GetLV()                    #参考等级
-    worldLvExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) #世界等级经验加成
+    worldLvExpRate = 0
     
     #经验公式
     redeemExp = int(eval(recList[1]))
@@ -3532,34 +3358,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
 
 
@@ -3646,21 +3444,12 @@
     # 每日免费直购礼包
     elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
         PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
-    # 仙盟联赛冠军仙盟每日俸禄奖励
-    elif rewardType == ChConfig.Def_RewardType_ChampionFamilyDailyReward:
-        GameLogic_FamilyWar.GetChampionFamilyDailyReward(curPlayer)
-    # 仙魔之争胜利场数奖励
-    elif rewardType == ChConfig.Def_RewardType_XMZZWinCnt:
-        GameLogic_XMZZ.GetXMZZWinPrize(curPlayer, dataEx)
     # 仙盟每日福利奖励
     elif rewardType == ChConfig.Def_RewardType_FamilyDayAward:
         PlayerFamily.GetFamilyDayAward(curPlayer)
     # 玩家等级奖励
     elif rewardType == ChConfig.Def_RewardType_LVAward:
         PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx)
-    # 仙宝寻主奖励
-    elif rewardType == ChConfig.Def_RewardType_XBXZ:
-        PlayerMagicWeapon.OnGetXBXZAward(curPlayer, dataEx)
     # 首充礼包奖励
     elif rewardType == ChConfig.Def_RewardType_GoldGiftFirst:
         PlayerGoldGift.GetPlayerGoldGiftFirst(curPlayer, dataEx)
@@ -3682,12 +3471,6 @@
     # 领取boss复活活动奖励
     elif rewardType == ChConfig.Def_RewardType_BossReborn:
         PlayerBossReborn.GetBossRebornActionAward(curPlayer, dataEx)
-    # 领取仙界盛典充值大礼
-    elif rewardType == ChConfig.Def_RewardType_FCRecharge:
-        PlayerFairyCeremony.GetFCRechargeAward(curPlayer)
-    # 领取仙界盛典全民来嗨
-    elif rewardType == ChConfig.Def_RewardType_FCParty:
-        PlayerFairyCeremony.GetFCPartyAward(curPlayer, dataEx)
     # 领取分包下载奖励
     elif rewardType == ChConfig.Def_RewardType_DownLoad:
         GetDownloadAward(curPlayer, dataEx)
@@ -3697,9 +3480,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)
@@ -3709,12 +3489,6 @@
     # 领取登录奖励活动奖励
     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)
@@ -3769,18 +3543,12 @@
     # 轮回殿奖励
     elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
         PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
-    #缥缈奇遇领取
-    elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
-        PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
     #历史累计充值领取
     elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
         PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
     #在线特惠充值额外奖励
     elif rewardType == ChConfig.Def_RewardType_OnlineRechargeTH:
         PlayerCoin.OnGetOnlineRechargeTH(curPlayer)
-    #天星塔全服挑战层领奖
-    elif rewardType == ChConfig.Def_RewardType_SkyTowerServerChallengeReward:
-        GameLogic_SkyTower.OnGetSkyTowerServerChallengeReward(curPlayer, dataEx, dataExStr)
     #创角奖励
     elif rewardType == ChConfig.Def_RewardType_CreateRole:
         OnGetCreateRoleAward(curPlayer)
@@ -3790,9 +3558,6 @@
     #境界渡劫任务条件奖励
     elif rewardType == ChConfig.Def_RewardType_RealmLVUpTask:
         PlayerPrestigeSys.GetRealmLVUpTaskAward(curPlayer, dataEx)
-    #仙盟boss伤害奖励
-    elif rewardType == ChConfig.Def_RewardType_FamilyBossHurt:
-        GameLogic_FamilyBoss.GetFamilyBossHurtAward(curPlayer, dataEx, dataExStr)
     #打包直购礼包奖励
     elif rewardType == ChConfig.Def_RewardType_DailyPackBuyGift:
         PlayerGoldGift.GetDailyPackBuyGift(curPlayer, dataEx)
@@ -3970,7 +3735,6 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     if not curPlayer:
         return
-    BossHurtMng.OnQueryBossHurtList(curPlayer, clientData)
     return
 
 
@@ -4440,7 +4204,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