hxp
2025-05-26 77b0f4f5acec30f9be8c7eeadfc25d9641ca26f3
16 卡牌服务端(删除脱机挂)
25个文件已修改
4个文件已删除
2087 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 331 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetTJG.py 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TJGResult.py 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_TJGAddTime.py 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetFeast.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGameWallow.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnlinePrize.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py 1069 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCache.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1451,35 +1451,6 @@
PacketSubCMD_1=0x0C
PacketCallFunc_1=OnDice
;玩家脱机挂
[PlayerTJG]
ScriptName = Player\PlayerTJG.py
Writer = alee
Releaser = alee
RegType = 0
RegisterPackCount = 5
PacketCMD_1 = 0xB2
PacketSubCMD_1 = 0x01
PacketCallFunc_1 = OnTJGState
PacketCMD_2 = 0xB2
PacketSubCMD_2 = 0x02
PacketCallFunc_2 = OnSightZoom
PacketCMD_3 = 0xB2
PacketSubCMD_3 = 0x03
PacketCallFunc_3 = OnTJGNPC
PacketCMD_4 = 0xB2
PacketSubCMD_4 = 0x04
PacketCallFunc_4 = OnTJGSystemSet
PacketCMD_5 = 0xB4
PacketSubCMD_5 = 0x0A
PacketCallFunc_5 = TJGNotifyDead
;仙魔之争
[GameLogic_XMZZ]
ScriptName = GameWorldLogic\FBProcess\GameLogic_XMZZ.py
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/NormalNPC_Attack_Player.py
@@ -26,7 +26,6 @@
import GameObj
import NPCCommon
import ChNPC
import PlayerTJG
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -40,10 +39,6 @@
#  @remarks 函数详细说明.
def GetCanAttack(curNormalNPC, curTagPlayer, skill, tick):
    if not AttackCommon.CheckNPCCanAttackTag(curNormalNPC, curTagPlayer, skill):
        return False
    if PlayerTJG.GetIsTJG(curTagPlayer):
        # 脱机挂玩家
        return False
    
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -513,7 +513,6 @@
Def_Effect_UseItemGiveZhenQi = 205      #使用道具给予真气
Def_Effect_ItemGiveFamilyActivity = 208      #使用道具给予仙盟活跃令
Def_Effect_ItemGiveFamilyContribution = 209      #使用道具给予仙盟贡献
Def_Effect_TJGAddTime = 210      #增加脱机挂时间
Def_Effect_ItemAddExp = 213      #给经验道具 
Def_Effect_ItemAddLV = 214       #直接升级道具 
Def_Effect_ItemAddExpByLV = 215      #给经验道具 XX级前,所加经验随等级增加而增加,XX级后按XX级算
@@ -803,7 +802,6 @@
Def_SkillID_ReviveTired = 20030    # 复活疲劳 SkillID
Def_SkillID_SkillReBorn = -1  # 技能复活ID
Def_SkillID_LimitSuperBuff = 10000    # 有限无敌BUFF SkillID
Def_SkillID_TJGSuperBuff = 20039    # 脱机挂死亡复活保护
Def_SkillID_Somersault = 190    # 翻滚快速闪避
Def_SkillID_DoubleExp = -1    # 双倍经验系统中的双倍经验ID
Def_SkillID_Justice = 11504    # 正义阵营
@@ -842,8 +840,6 @@
# 切地图需清除的buff
ClearBuffOnMapChangeList = [Def_SkillID_DropOwnerBuff, Def_SkillID_FamilyWar_CWinBuff, 
                            Def_SkillID_FamilyWar_JoinBuff, Def_SkillID_FamilyWar_RandBuffAttr]
# 脱机挂状态下不刷新buff时间的
TJGStateNotRefreshTimeBuff = [Def_SkillID_Red]
#技能ID对应的区域类型
Def_AreaType_SkillID_Safe = 20011  # 安全区
@@ -887,7 +883,6 @@
Def_HurtType_FuhaoHit,       # 富豪一击 
) = range(21, 25)
Def_EquipItemType_TJGAutoEat = xrange(Def_ItemType_retWeapon, Def_ItemType_retGlove + 1)
#装备类型
Def_EquipItemType = range(Def_ItemType_retWeapon, Def_ItemType_DogzEquipScute + 1)
@@ -3233,8 +3228,6 @@
Def_PlayerKey_MoreHurtValue = "MoreHurtValue"     # 额外的伤害值,一般用于不走公式
Def_PlayerKey_BloodShiledHurt = "BSHurt"     # 伤害值用于血盾抵消
Def_PlayerKey_BloodShiledHurtEx = "BSHurtEx"     # 伤害值用于血盾抵消
Def_PlayerKey_TJGPackFullAfterEat = "TJGFullEat"     # 脱机挂吞噬后背包依然满的情况
Def_PlayerKey_TJGStartTime = "TJGStartTime"     # 脱机挂结算时间起点
Def_PlayerKey_EquipTime = "EquipTime"     # 时效装备
Def_PlayerKey_PowerPartTime = "PowerPartTime"     # 蓄力每次消耗时间,因攻速改变
Def_PlayerKey_PowerPartCount = "PowerPartCount"     # 蓄力技能能量次数
@@ -3516,7 +3509,6 @@
Def_QuDao_DoubleBillCount = "qddbCount"   # 渠道返利的仙玉领取次数 日期+次数组合数字
Def_PDict_GeTuiSet = "GetuiSet"     # 推送提醒的设置
Def_PDict_NoGeTuiTime = "NoGetuiTime"     # 推送提醒免打扰时间,将字符串组合数字
Def_PlayerKey_TJGNPC = "TJGNPC"     # 脱机挂机NPC点
Def_PDict_OnHour = "OnHour"
Def_PDict_OnDay = "OnDay" # 0点过天
Def_PDict_OnWeek = "OnWeek" # 0点过周
@@ -3738,7 +3730,6 @@
Def_PDict_MoneyMinus = "MoneyMinus_%s"  # 货币对应负值, 参数[货币类型]
Def_PDict_Currency = "PlayerCurrency_%s"  # 自定义货币类型, 参数[自定义货币类型]
Def_PDict_UseMoneyTotal = "UseMoneyTotal_%s"  # 累计消耗货币, 参数[货币类型]
Def_PDict_TJGSet = "TJGSet"  # 脱机挂系统设定
Def_PDict_TJGDeadTime = "TJGDeadTime"  # 脱机被杀时间
Def_PDict_TJGDeadPayTime = "TJGDeadPayTime"  # 脱机被杀后可补偿的时间
Def_PDict_TJGDeadExp = "TJGDeadExp"  # 脱机被杀经验
@@ -4455,19 +4446,6 @@
# 我要太极
Def_PDict_Dice_Result = "DiceResult" # 我要太极结果
Def_PDict_Dice_FreeChangeCnt = "DiceFreeChangeCnt" # 我要太极免费改投次数
# 脱机挂类型通知结果
Def_PDictType_TJGNotify_Exp1 = "TJGNExp1"   #经验
Def_PDictType_TJGNotify_Exp2 = "TJGNExp2"   #超过E部分
Def_PDictType_TJGNotify_Time = "TJGNTime"   #使用时间
Def_PDictType_TJGNotify_EatPurple = "TJGNEatP"   #吞噬的紫装数量
Def_PDictType_TJGNotify_GiveCnt = "TJGNGiveCnt"   #吞噬获得的炼丹材料数量
Def_PDictType_TJGNotify_Purple = "TJGNPurple"   #获得紫装数量
Def_PDictType_TJGNotify_Orange = "TJGNOrg"   #获得橙装数量
Def_PDictType_TJGNotify_LV = "TJGLV"   #脱机前的等级
Def_PDictType_TJGNotify_ItemID = "TJGItemID_%s"   #脱机挂指定物品掉落显示
Def_PDictType_TJGOnDayEx = "TJGOnDayEx"   #是否脱机挂中过天(5点)真实登录后重置
# 挂机收益
Def_PDict_GuajiCalcTime = "GuajiCalcTime"   # 上次统计收益时间戳
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -20911,289 +20911,6 @@
#------------------------------------------------------
#B2 01 脱机挂状态 # tagCMLoginState
class  tagCMLoginState(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("State", c_ubyte),    # 0正常登录,1脱机登录,2脱机登录死亡
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB2
        self.SubCmd = 0x01
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB2
        self.SubCmd = 0x01
        self.State = 0
        return
    def GetLength(self):
        return sizeof(tagCMLoginState)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B2 01 脱机挂状态 // tagCMLoginState:
                                Cmd:%s,
                                SubCmd:%s,
                                State:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.State
                                )
        return DumpString
m_NAtagCMLoginState=tagCMLoginState()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLoginState.Cmd,m_NAtagCMLoginState.SubCmd))] = m_NAtagCMLoginState
#------------------------------------------------------
#B2 05 推送提醒设置 #tagCMPushNotificationsSetting
class  tagCMPushNotificationsSetting(Structure):
    Head = tagHead()
    OnoffBit = 0    #(DWORD OnoffBit)// 按位约定开关
    TimeLen = 0    #(BYTE TimeLen)
    TimeStr = ""    #(String TimeStr)// 时间字符串  01:02-05:00
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB2
        self.Head.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.OnoffBit,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.TimeLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,self.TimeLen)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB2
        self.Head.SubCmd = 0x05
        self.OnoffBit = 0
        self.TimeLen = 0
        self.TimeStr = ""
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 1
        length += len(self.TimeStr)
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.OnoffBit)
        data = CommFunc.WriteBYTE(data, self.TimeLen)
        data = CommFunc.WriteString(data, self.TimeLen, self.TimeStr)
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                OnoffBit:%d,
                                TimeLen:%d,
                                TimeStr:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.OnoffBit,
                                self.TimeLen,
                                self.TimeStr
                                )
        return DumpString
m_NAtagCMPushNotificationsSetting=tagCMPushNotificationsSetting()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMPushNotificationsSetting.Head.Cmd,m_NAtagCMPushNotificationsSetting.Head.SubCmd))] = m_NAtagCMPushNotificationsSetting
#------------------------------------------------------
#B2 02 视野缩放 #tagCMSightZoom
class  tagCMSightZoom(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Sight", c_ubyte),    # 视野缩放,用于脱机挂不超过最大视野,空闲状态为0,被玩家攻击恢复视野
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB2
        self.SubCmd = 0x02
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB2
        self.SubCmd = 0x02
        self.Sight = 0
        return
    def GetLength(self):
        return sizeof(tagCMSightZoom)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B2 02 视野缩放 //tagCMSightZoom:
                                Cmd:%s,
                                SubCmd:%s,
                                Sight:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Sight
                                )
        return DumpString
m_NAtagCMSightZoom=tagCMSightZoom()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSightZoom.Cmd,m_NAtagCMSightZoom.SubCmd))] = m_NAtagCMSightZoom
#------------------------------------------------------
#B2 04 系统设置 #tagCMSystem
class  tagCMSystem(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("AutoEat", c_ubyte),    # 自动吞噬
                  ("AutoReborn", c_ubyte),    #自动买活
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB2
        self.SubCmd = 0x04
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB2
        self.SubCmd = 0x04
        self.AutoEat = 0
        self.AutoReborn = 0
        return
    def GetLength(self):
        return sizeof(tagCMSystem)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B2 04 系统设置 //tagCMSystem:
                                Cmd:%s,
                                SubCmd:%s,
                                AutoEat:%d,
                                AutoReborn:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.AutoEat,
                                self.AutoReborn
                                )
        return DumpString
m_NAtagCMSystem=tagCMSystem()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSystem.Cmd,m_NAtagCMSystem.SubCmd))] = m_NAtagCMSystem
#------------------------------------------------------
#B2 03 设置脱机挂NPC # tagCMTJGnpc
class  tagCMTJGnpc(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("NPCID", c_int),    # 脱机挂点
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB2
        self.SubCmd = 0x03
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB2
        self.SubCmd = 0x03
        self.NPCID = 0
        return
    def GetLength(self):
        return sizeof(tagCMTJGnpc)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B2 03 设置脱机挂NPC // tagCMTJGnpc:
                                Cmd:%s,
                                SubCmd:%s,
                                NPCID:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.NPCID
                                )
        return DumpString
m_NAtagCMTJGnpc=tagCMTJGnpc()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTJGnpc.Cmd,m_NAtagCMTJGnpc.SubCmd))] = m_NAtagCMTJGnpc
#------------------------------------------------------
# B3 17 情戒解锁 #tagCMLoveRingUnlock
class  tagCMLoveRingUnlock(Structure):
@@ -22536,54 +22253,6 @@
m_NAtagCMSuperAtk=tagCMSuperAtk()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSuperAtk.Head.Cmd,m_NAtagCMSuperAtk.Head.SubCmd))] = m_NAtagCMSuperAtk
#------------------------------------------------------
#B4 0A 脱机挂死亡 # tagCMTJGDead
class  tagCMTJGDead(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB4
        self.SubCmd = 0x0A
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB4
        self.SubCmd = 0x0A
        return
    def GetLength(self):
        return sizeof(tagCMTJGDead)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B4 0A 脱机挂死亡 // tagCMTJGDead:
                                Cmd:%s,
                                SubCmd:%s
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd
                                )
        return DumpString
m_NAtagCMTJGDead=tagCMTJGDead()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTJGDead.Cmd,m_NAtagCMTJGDead.SubCmd))] = m_NAtagCMTJGDead
#------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -60090,234 +60090,6 @@
#------------------------------------------------------
#B4 10 脱机挂被杀后离线找回 # tagMCTJGDeadPay
class  tagMCTJGDeadPay(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Times", c_int),    # 可找回时间
                  ("DeadTime", c_int),    # 死亡时间
                  ("Exp", c_int),    # 经验
                  ("Exp1", c_int),    # 经验 亿
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xB4
        self.SubCmd = 0x10
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xB4
        self.SubCmd = 0x10
        self.Times = 0
        self.DeadTime = 0
        self.Exp = 0
        self.Exp1 = 0
        return
    def GetLength(self):
        return sizeof(tagMCTJGDeadPay)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B4 10 脱机挂被杀后离线找回 // tagMCTJGDeadPay:
                                Cmd:%s,
                                SubCmd:%s,
                                Times:%d,
                                DeadTime:%d,
                                Exp:%d,
                                Exp1:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Times,
                                self.DeadTime,
                                self.Exp,
                                self.Exp1
                                )
        return DumpString
m_NAtagMCTJGDeadPay=tagMCTJGDeadPay()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGDeadPay.Cmd,m_NAtagMCTJGDeadPay.SubCmd))] = m_NAtagMCTJGDeadPay
#------------------------------------------------------
#B4 09 通知脱机挂结果 #tagMCTJGInfo
class  tagMCTJGItems(Structure):
    _pack_ = 1
    _fields_ = [
                  ("ItemID", c_int),
                  ("Count", c_ushort),
                  ]
    def __init__(self):
        self.Clear()
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.ItemID = 0
        self.Count = 0
        return
    def GetLength(self):
        return sizeof(tagMCTJGItems)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''//B4 09 通知脱机挂结果 //tagMCTJGInfo:
                                ItemID:%d,
                                Count:%d
                                '''\
                                %(
                                self.ItemID,
                                self.Count
                                )
        return DumpString
class  tagMCTJGInfo(Structure):
    Head = tagHead()
    Exp1 = 0    #(DWORD Exp1)// 经验
    Exp2 = 0    #(DWORD Exp2)// 超亿经验
    Times = 0    #(DWORD Times)// 使用时间秒
    PurpleEquip = 0    #(WORD PurpleEquip)// 产出紫装数量
    OrangeEquip = 0    #(WORD OrangeEquip)// 产出橙装数量
    EatPurpleEquip = 0    #(WORD EatPurpleEquip)// 吞噬紫装数量
    BeforeLV = 0    #(WORD BeforeLV)//脱机前记录的等级
    GiveCnt = 0    #(WORD GiveCnt)//获得炼丹材料数量
    Cnt = 0    #(BYTE Cnt)//物品类别数量
    Items = list()    #(vector<tagMCTJGItems> Items)
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xB4
        self.Head.SubCmd = 0x09
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Exp1,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Exp2,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Times,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.OrangeEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.EatPurpleEquip,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.BeforeLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.GiveCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Cnt):
            temItems = tagMCTJGItems()
            _pos = temItems.ReadData(_lpData, _pos)
            self.Items.append(temItems)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xB4
        self.Head.SubCmd = 0x09
        self.Exp1 = 0
        self.Exp2 = 0
        self.Times = 0
        self.PurpleEquip = 0
        self.OrangeEquip = 0
        self.EatPurpleEquip = 0
        self.BeforeLV = 0
        self.GiveCnt = 0
        self.Cnt = 0
        self.Items = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 4
        length += 4
        length += 4
        length += 2
        length += 2
        length += 2
        length += 2
        length += 2
        length += 1
        for i in range(self.Cnt):
            length += self.Items[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteDWORD(data, self.Exp1)
        data = CommFunc.WriteDWORD(data, self.Exp2)
        data = CommFunc.WriteDWORD(data, self.Times)
        data = CommFunc.WriteWORD(data, self.PurpleEquip)
        data = CommFunc.WriteWORD(data, self.OrangeEquip)
        data = CommFunc.WriteWORD(data, self.EatPurpleEquip)
        data = CommFunc.WriteWORD(data, self.BeforeLV)
        data = CommFunc.WriteWORD(data, self.GiveCnt)
        data = CommFunc.WriteBYTE(data, self.Cnt)
        for i in range(self.Cnt):
            data = CommFunc.WriteString(data, self.Items[i].GetLength(), self.Items[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Exp1:%d,
                                Exp2:%d,
                                Times:%d,
                                PurpleEquip:%d,
                                OrangeEquip:%d,
                                EatPurpleEquip:%d,
                                BeforeLV:%d,
                                GiveCnt:%d,
                                Cnt:%d,
                                Items:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Exp1,
                                self.Exp2,
                                self.Times,
                                self.PurpleEquip,
                                self.OrangeEquip,
                                self.EatPurpleEquip,
                                self.BeforeLV,
                                self.GiveCnt,
                                self.Cnt,
                                "..."
                                )
        return DumpString
m_NAtagMCTJGInfo=tagMCTJGInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTJGInfo.Head.Cmd,m_NAtagMCTJGInfo.Head.SubCmd))] = m_NAtagMCTJGInfo
#------------------------------------------------------
# B4 20 回合制战斗状态 #tagMCTurnFightState
class  tagMCTurnFightState(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py
@@ -41,7 +41,6 @@
import GameWorld
import ChConfig
import CommFunc
import PlayerTJG
import datetime
import random
@@ -601,14 +600,11 @@
# 离线数据
def WriteEvent_session(curPlayer):
    seconds = 0
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    else:
        logoffTimeStr = curPlayer.GetLogoffTime().strip()
        loginTimeStr = curPlayer.GetLoginTime().strip()
        if logoffTimeStr and loginTimeStr:
            passTimes = GameWorld.GetDateTimeByStr(logoffTimeStr) - GameWorld.GetDateTimeByStr(loginTimeStr)
            seconds = passTimes.seconds
    logoffTimeStr = curPlayer.GetLogoffTime().strip()
    loginTimeStr = curPlayer.GetLoginTime().strip()
    if logoffTimeStr and loginTimeStr:
        passTimes = GameWorld.GetDateTimeByStr(logoffTimeStr) - GameWorld.GetDateTimeByStr(loginTimeStr)
        seconds = passTimes.seconds
    EventReport(ShareDefine.Def_UserAction_Session, "OnlineTime=%s&SessionID=%s"%(seconds, GameWorld.GetSessionID(curPlayer)), curPlayer)
    #===========================================================================
    # sessionEvent = session()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetTJG.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TJGResult.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/GMShell.py
@@ -28,7 +28,6 @@
import PlayerControl
import ReadChConfig
import traceback
import PlayerTJG
import FBLogic
import GameObj
#---------------------------------------------------------------------
@@ -179,10 +178,7 @@
                if value == None:
                    GameWorld.DebugAnswer(curPlayer, "参数错误, 必须为纯数字!")
                    return
                if callFunName == "SetHappyPoint":
                    PlayerTJG.SetTJGTime(curPlayer, value)
                else:
                    callObj(value)
                callObj(value)
            else:
                GameWorld.DebugAnswer(curPlayer, "不支持该命令!curPlayer.%s" % callFunName)
                return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -609,8 +609,6 @@
        return False
    #if not curPlayer.GetInitOK():
    #    return False
    #if IsTJGPlayer(curPlayer):
    #    return False
    if IsMirrorPlayer(curPlayer):
        return False
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py
@@ -27,7 +27,6 @@
import SkillCommon
import PyGameData
import BuffSkill
import PlayerTJG
import NPCCommon
import ChConfig
import GameObj
@@ -606,9 +605,6 @@
def __DoCheckHorsePetRobBossKillCntBuff(curPlayer, tick):
    familyID = curPlayer.GetFamilyID()
    if not familyID:
        return
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    
    killCount = PyGameData.g_familyKillHorsePetRobBossCntDict.get(familyID, 0)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -723,7 +723,6 @@
                            ChConfig.Def_Effect_Face:"Item_Face",
                            ChConfig.Def_Effect_FacePic:"Item_Face",
                            ChConfig.Def_Effect_ItemAddLV:"Item_AddLV", #升级道具
                            ChConfig.Def_Effect_TJGAddTime:"Item_TJGAddTime", #增加脱机挂时间
                            ChConfig.Def_Effect_GuajiAward:"Item_GuajiAward", #直接给挂机收益
                            ChConfig.Def_Effect_CleanGuilt:"Item_CleanGuilt", # 洗红名
                            ChConfig.Def_Effect_PrizeCoin:"Item_PrizeCoin", # 奖励充值点券
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_TJGAddTime.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -765,187 +765,6 @@
            return
    return ipyDrop
def GetNPCDropInfoTJG(dropPlayer, mapID, npcID, killCount):
    '''脱机挂杀怪掉落专用函数
    只算: 1.饼图装备掉落 + 2.指定物品ID掉落 + 3.金币掉落
    '''
    ipyDrop = GetNPCDropIpyData(npcID)
    if not ipyDrop:
        return
    realmNPCIpyData = None
    realmMapIDList = IpyGameDataPY.GetFuncEvalCfg("RealmDifficulty", 1)
    realmDifficulty = PlayerControl.GetRealmDifficulty(dropPlayer)
    if mapID in realmMapIDList and realmDifficulty:
        realmLV = PlayerControl.GetDifficultyRealmLV(realmDifficulty)
        realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, realmLV)
        #if realmNPCIpyData:
        #    maxDropLV = realmNPCIpyData.GetMaxDrapLV()
    #脱机暂不限制最大等级掉落
    #playerLV = dropPlayer.GetLV()
    #maxDropLV = ipyDrop.GetMaxDropLV()
    #if maxDropLV and playerLV > maxDropLV:
    #    GameWorld.DebugLog("超过最大可掉落等级,不掉落物品!npcID=%s,playerLV(%s) > maxDropLV(%s)" % (npcID, playerLV, maxDropLV))
    #    return
    playerID = dropPlayer.GetPlayerID()
    npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
    if not npcData:
        return
    dropIDList = [] # 掉落的ID列表
    itemJobList = [dropPlayer.GetJob()] if ipyDrop.GetIsDropJobSelf() else IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1) # 掉落装备职业列表
    equipDropRatePlus = PlayerControl.GetDropEquipPer(dropPlayer)
    equipDropDoCountPlus = PlayerControl.GetDropEquipDoCount(dropPlayer)
    dropRatePlusValue = ipyDrop.GetCanDropRatePlus()
    if not dropRatePlusValue & pow(2, 0):
        equipDropRatePlus = 0
    if not dropRatePlusValue & pow(2, 1):
        equipDropDoCountPlus = 0
    doCountAdd = 0
    doCountRate = ChConfig.Def_MaxRateValue
    GameWorld.DebugLog("脱机挂杀怪掉落: npcID=%s,killCount=%s,itemJobList=%s,dropRatePlusValue=%s,equipDropRatePlus=%s,equipDropDoCountPlus=%s"
                       % (npcID, killCount, itemJobList, dropRatePlusValue, equipDropRatePlus, equipDropDoCountPlus), playerID)
    dropEquipInfoList = [] # [(阶,颜色, 件数), ...]
    # 1.装备只算饼图概率
    pieRateDoCnt = ipyDrop.GetPieRateDoCnt()
    if pieRateDoCnt and ipyDrop.GetPieRateDrop():
        pieRateDoCnt = __GetNPCDropDoCountChange(pieRateDoCnt, doCountRate + equipDropDoCountPlus, doCountAdd)
        pieRateDoCnt *= killCount
        pieRateDropList = ipyDrop.GetPieRateDrop() # [(概率,0),(概率,(阶,颜色)),...]
        if equipDropRatePlus:
            dropRateList = GameWorld.GetPlusPieList(pieRateDropList, equipDropRatePlus)
            GameWorld.DebugLog("    装备配置饼图: %s,equipDropRatePlus=%s" % (pieRateDropList, equipDropRatePlus), playerID)
        else:
            dropRateList = pieRateDropList
        preRate = 0
        maxRate = dropRateList[-1][0]
        GameWorld.DebugLog("    装备掉落饼图: %s,maxRate=%s" % (dropRateList, maxRate), playerID)
        for rateInfo in dropRateList:
            rate, equipInfo = rateInfo
            curRate = rate - preRate
            if not curRate:
                break
            preRate = rate
            if not equipInfo:
                continue
            classLV, color = equipInfo
            totalRate = curRate * pieRateDoCnt # 总概率
            dropCount = totalRate / maxRate # 可掉落件数
            rateEx = totalRate % maxRate # 剩余概率
            if GameWorld.CanHappen(rateEx, maxRate):
                dropCount += 1
            GameWorld.DebugLog("    装备掉率: curRate=%s,totalRate=%s,rateEx=%s,dropCount=%s,classLV=%s,color=%s"
                               % (curRate, totalRate, rateEx, dropCount, classLV, color), playerID)
            if not dropCount:
                continue
            dropEquipInfoList.append([classLV, color, dropCount])
        GameWorld.DebugLog("    装备掉落结果: killCount=%s,[阶,颜色,件数]=%s" % (killCount, dropEquipInfoList), playerID)
    colorSuitRateDict = ipyDrop.GetEquipColorSuitInfo() # 装备颜色对应套装概率 {颜色:套装概率, ...}
    colorSuitPlaceKeyInfoDict = ipyDrop.GetEquipPartKeyRateInfo() # 装备部位集合信息 {(颜色,是否套装):部位集合key, ...}
    dropEquipIDDict = {}
    for classLV, color, dropCount in dropEquipInfoList:
        if realmNPCIpyData:
            classLV = realmNPCIpyData.GetEquipClassLV()
            GameWorld.DebugLog("    脱机掉落对应难度境界装备: classLV=%s" % classLV, playerID)
        suitCountDict = {} # {套装:件数, ...}
        if color in colorSuitRateDict:
            suitRate = colorSuitRateDict[color]
            for _ in xrange(dropCount):
                isSuit = GameWorld.CanHappen(suitRate, maxRate=Def_NPCMaxDropRate)
                suitCountDict[isSuit] = suitCountDict.get(isSuit, 0) + 1
        else:
            suitCountDict[0] = dropCount
        for isSuit, curDropCount in suitCountDict.items():
            colorSuitKey = (color, isSuit)
            if colorSuitKey not in colorSuitPlaceKeyInfoDict:
                GameWorld.ErrLog("未配置颜色是否套装对应部位集合key! npcID=%s,color=%s,isSuit=%s" % (npcID, color, isSuit))
                continue
            placeKey = colorSuitPlaceKeyInfoDict[colorSuitKey]
            placeList = GetEquipPlaceByPlaceKey(placeKey)
            if not placeList:
                GameWorld.ErrLog("部位集合key不存在!npcID=%s,placeKey=%s" % (npcID, placeKey))
                continue
            randEquipIDList = __GetEquipIDList(npcID, classLV, color, isSuit, placeList, itemJobList)
            if not randEquipIDList:
                continue
            for _ in xrange(curDropCount):
                randItemID = random.choice(randEquipIDList)
                dropIDList.append(randItemID)
                dropEquipIDDict[randItemID] = [color, placeKey]
                GameWorld.DebugLog("    掉落装备: npcID=%s,itemID=%s,classLV=%s,color=%s,isSuit=%s,placeKey=%s,itemJobList=%s,randEquipIDList=%s"
                                   % (npcID, randItemID, classLV, color, isSuit, placeKey, itemJobList, randEquipIDList), playerID)
    # 2. 指定物品ID库
    itemIDDropRateDict = ipyDrop.GetItemIDDropRate() # {物品ID:概率, ...}
    itemIDDropMaxCntDict = ipyDrop.GetItemIDMaxDropCount() # {物品ID:最大掉落个数,...}
    for itemID, dropRate in itemIDDropRateDict.items():
        if not dropRate:
            continue
        doCnt = itemIDDropMaxCntDict.get(itemID, 1) # 默认1个
        doCnt = __GetNPCDropDoCountChange(doCnt, doCountRate, doCountAdd)
        doCnt *= killCount
        totalRate = dropRate * doCnt
        dropCount = totalRate / Def_NPCMaxDropRate # 可掉落件数
        rateEx = totalRate % Def_NPCMaxDropRate # 剩余概率
        if GameWorld.CanHappen(rateEx, Def_NPCMaxDropRate):
            dropCount += 1
        dropIDList += [itemID] * dropCount
        GameWorld.DebugLog("    指定物品掉落: itemID=%s,dropRate=%s,doCnt=%s,totalRate=%s,dropCount=%s"
                           % (itemID, dropRate, doCnt, totalRate, dropCount), playerID)
    # 检查掉落互斥ID组
    dropIDList = __RemoveMutexDropID(dropIDList, IpyGameDataPY.GetFuncCfg("MutexDrop", 1))
    # 掉落金币
    dropMoneyDoCnt = ipyDrop.GetDropMoneyDoCnt()
    dropMoneyRate = ipyDrop.GetDropMoneyRate()
    moneyTotalRate = dropMoneyRate * dropMoneyDoCnt * killCount
    dropMoneyCnt = moneyTotalRate / ChConfig.Def_NPCMapDropRate
    if GameWorld.CanHappen(moneyTotalRate % ChConfig.Def_NPCMapDropRate, ChConfig.Def_NPCMapDropRate):
        dropMoneyCnt += 1
    dropMoney = 0
    if dropMoneyCnt:
        dropMoney = __GetDropMoneyValue(dropPlayer, ipyDrop, realmNPCIpyData) * dropMoneyCnt
        GameWorld.DebugLog("    金币掉率: dropMoneyRate=%s,moneyTotalRate=%s,dropMoneyCnt=%s,dropMoney=%s"
                           % (dropMoneyRate, moneyTotalRate, dropMoneyCnt, dropMoney), playerID)
    dropIDCountDict = {}
    for dropID in dropIDList:
        dropIDCountDict[dropID] = dropIDCountDict.get(dropID, 0) + 1
    # 集字掉落
    dropWordsCountDict = PlayerActCollectWords.OnGetDropWordsItemDict(dropPlayer, npcData, killCount)
    for dropID, dropCount in dropWordsCountDict.items():
        dropIDCountDict[dropID] = dropIDCountDict.get(dropID, 0) + dropCount
    # 垃圾分类
    giveGarbageItemList = PlayerActGarbageSorting.AddActGarbageTaskProgress(dropPlayer, ChConfig.Def_GarbageTask_KillNPC, killCount, isTJG=True)
    for dropID, dropCount, _ in giveGarbageItemList:
        dropIDCountDict[dropID] = dropIDCountDict.get(dropID, 0) + dropCount
    auctionIDList = []
    if ipyDrop.GetAucionItemCanSell():
        for dropID in dropIDCountDict.keys():
            if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", dropID):
                auctionIDList.append(dropID)
    if dropIDCountDict:
        GameWorld.DebugLog("    最终掉落: npcID=%s,killCount=%s,dropIDCountDict=%s,auctionIDList=%s,dropMoney=%s"
                           % (npcID, killCount, dropIDCountDict, auctionIDList, dropMoney), playerID)
    return dropIDCountDict, auctionIDList, dropMoney
def GetNPCDropInfo(dropPlayer, mapID, npcID, ownerPlayerList=[], ipyDrop=None, isSingle=True, isKillCountDrop=True, curGrade=0):
    '''获取NPC掉落信息, 击杀及扫荡通用,调用该函数获得掉落信息,然后再看掉落地板上还是直接放入背包
        @param dropPlayer: 用于判断调用相关用的玩家示例,该玩家并不一定是击杀者,只是按一定规则设定的掉落判断依据的玩家
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -100,7 +100,6 @@
import PassiveBuffEffMng
import PlayerDiceEx
import QuestCommon
import PlayerTJG
import GameLogic_XMZZ
import PlayerFlashSale
import PlayerFlashGiftbag
@@ -838,8 +837,6 @@
    PlayerEquipDecompose.PlayerLogin(curPlayer)
    #防沉迷
    PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick)
    # 通知脱机挂信息
    #PlayerTJG.NotifyTJGInfo(curPlayer)
    # 协助
    PlayerAssist.OnPlayerLogin(curPlayer)
    # 极品白拿
@@ -957,10 +954,7 @@
        
    curPlayer.SetState(0)   # 脱机挂恢复为正常上线
    curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
    #tjgTime = PlayerTJG.GetTJGTime(curPlayer)
    #if tjgTime:
    #    PlayerControl.SendGameServerRefreshState(curPlayer, IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
    PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
    DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
    return
@@ -1271,7 +1265,6 @@
    #---等级限制---
    if GameWorld.IsCrossServer():
        return
    #PlayerTJG.TJGDeadOffline(curPlayer)
    
#===============================================================================
#    #---等级限制---
@@ -3157,8 +3150,6 @@
    
    #下线召回宠物
    PetControl.ReCallFightPet(curPlayer)
    #PlayerTJG.CalcPlayerTJG(curPlayer, tick)
    
    #离线session
    EventReport.WriteEvent_session(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
@@ -67,8 +67,7 @@
# 发送主服玩家数据给跨服
def SendMergeData_Buff(curPlayer, buffID, plusValueList):
    if buffID in [ChConfig.Def_SkillID_LimitSuperBuff,
                  ChConfig.Def_SkillID_TJGSuperBuff]:
    if buffID in [ChConfig.Def_SkillID_LimitSuperBuff]:
        # 不需要处理的buff
        return
    if curPlayer.GetGameObjType() != IPY_GameWorld.gotPlayer:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -52,7 +52,6 @@
import PlayerArena
import PlayerFaQi
import PlayerGuaji
import PlayerTJG
import EventShell
@@ -73,7 +72,6 @@
                     ShareDefine.GameFuncID_OSSail:lambda curObj:FunctionNPCCommon.OSSaleOpenMail(curObj),
                     ShareDefine.GameFuncID_AddPoint:lambda curObj:PlayerControl.DoAddPointOpen(curObj),
                     ShareDefine.GameFuncID_Talent:lambda curObj:PlayerGreatMaster.DoTalentOpen(curObj),
                     #ShareDefine.GameFuncID_TJG:lambda curObj:PlayerTJG.DoTJGOpen(curObj),
                     ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
                     ShareDefine.GameFuncID_FaQi:lambda curObj:PlayerFaQi.DoFaQiOpen(curObj),
                     ShareDefine.GameFuncID_LianTi:lambda curObj:PlayerLianTi.DoLianTiOpen(curObj),
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActHorsePetFeast.py
@@ -16,7 +16,6 @@
#-------------------------------------------------------------------------------
import ChConfig
import PlayerTJG
import ShareDefine
import IpyGameDataPY
import ChPyNetSendPack
@@ -106,7 +105,7 @@
            continue
        playerID = hurtObj.GetValueID()
        hurtPlayer = copyPlayerManager.FindPlayerByID(playerID)
        if not hurtPlayer or PlayerTJG.GetIsTJG(hurtPlayer):
        if not hurtPlayer:
            continue
        if curNPC and not hurtPlayer.CanSeeOther(curNPC):
            GameWorld.Log("    伤血玩家不在boss视野内,无法获得奖励!playerPos(%s,%s), npcPos(%s,%s)" 
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActivity.py
@@ -29,7 +29,6 @@
import PyGameData
import GameFuncComm
import EventShell
import PlayerTJG
import PlayerPet
import PlayerVip
import datetime
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -77,7 +77,6 @@
import GameLogic_SealDemon
import GameLogic_ZhuXianBoss
import GameLogic_CrossDemonKing
import PlayerTJG
import PlayerVip
import PlayerRefineStove
import PlayerFamilyTech
@@ -1990,11 +1989,6 @@
        GameWorld.Log("玩家已经死亡, 无法进入副本!")
        return ShareDefine.EntFBAskRet_Dead
    
    if PlayerTJG.GetIsTJG(curPlayer):
        if isNotify:
            NotifyCode(curPlayer, "SingleEnterDefaul", [mapID])
        return ShareDefine.EntFBAskRet_TJG
    ## 队伍检查的情况,队长不处理,只处理队员
    if isTeamAsk and curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader:
        # 后端只做boss状态下,被动进入副本限制,防止打boss中被拉进去副本
@@ -2356,9 +2350,6 @@
        特殊boss分流: 
        @param bossID: 分流bossID
    '''
    if PlayerTJG.GetIsTJG(curPlayer):
        GameWorld.DebugLog("脱机的玩家不处理分流!", curPlayer.GetPlayerID())
        return tagLineID
    if GameWorld.IsCrossServer():
        return tagLineID
    # 非常规地图之间的切换不处理
@@ -3796,8 +3787,6 @@
    ## 刷新红名对应PKValue
    curPKValue = curPlayer.GetPKValue()
    if not curPKValue:
        return
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    redBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_Red)[0]
    if not redBuff:
@@ -5725,7 +5714,6 @@
        #通知死亡
        DoPlayerDead(curPlayer)
        
        #PlayerTJG.PlayerTJGReborn(curPlayer, tick)
        GameObj.ClearPyPlayerState(curPlayer)
        
        MirrorAttack.OnPlayerDead(curPlayer)
@@ -6249,7 +6237,7 @@
    fightExpRate += PlayerGoldInvest.GetAddFightExpRate(curPlayer)
    
    actExpRateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ExpRate, {})# 多倍经验活动加成
    if not PlayerTJG.GetIsTJG(curPlayer) and actExpRateInfo.get(ShareDefine.ActKey_State):
    if actExpRateInfo.get(ShareDefine.ActKey_State):
        actExpIpyData = IpyGameDataPY.GetIpyGameData("ActExpRate", actExpRateInfo.get(ShareDefine.ActKey_CfgID))
        if actExpIpyData and curPlayer.GetLV() >= actExpIpyData.GetLVLimit():
            fightExpRate += actExpIpyData.GetAddExpRate()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGameWallow.py
@@ -16,10 +16,8 @@
import ChConfig
import GameWorld
import IPY_GameWorld
import ReadChConfig
import PlayerControl
import PlayerTJG
import ChPyNetSendPack
import NetPackCommon
#------------------------------------------------------------------------------
@@ -132,10 +130,6 @@
    offMin = PlayerControl.GetPlayerLeaveServerMinute(curPlayer)
    noteOffMin = offMin + curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Wallow_OfflineTime)
    
    #脱机挂时间,脱机挂时间清除必须在这之后
    tjgtime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDictType_TJGNotify_Time, 0, ChConfig.Def_PDictType_TJGNotify)/60
    noteOffMin += tjgtime
    if noteOffMin < Def_Wallow_Offline_HealthTime:
        #未达到健康离线,记录时间,退出
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Wallow_OfflineTime, noteOffMin)
@@ -214,8 +208,6 @@
# @param tick 时间戳
# @return none
def DoLogic_WallowOnlineTime(curPlayer, tick):
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    
    if not GetIsWallowRole(curPlayer):
        return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
@@ -43,10 +43,8 @@
import ShareDefine
import DataRecordPack
import ChPyNetSendPack
import PlayerFamilyRedPacket
import NetPackCommon
import IpyGameDataPY
import PlayerTJG
import CommFunc
import ChEquip
@@ -68,8 +66,6 @@
def UpdateFirstGoldTime(curPlayer):
    #更新首充提示剩余时间
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime)
    if not remainTime:
        return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnlinePrize.py
@@ -22,7 +22,6 @@
import NetPackCommon
import PlayerControl
import IpyGameDataPY
import PlayerTJG
import time
@@ -102,8 +101,6 @@
# @param notify 是否通知客户端
# @return None
def CalcOnlineTime(curPlayer):
    if PlayerTJG.GetIsTJG(curPlayer):
        return 0
    onlineTime = GetOnlineTime(curPlayer)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DayOnlineTime, onlineTime)
    SetStartCalcOnlineTick(curPlayer, 0)
@@ -153,9 +150,7 @@
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DayOnlineTime, 0)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnlinePrizeNote, 0) # 重置每日在线奖励
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    SetStartCalcOnlineTick(curPlayer)
    
    SendOnlinePrizeInfo(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRecover.py
@@ -30,7 +30,6 @@
import IpyGameDataPY
import FBCommon
import GameFuncComm
import PlayerTJG
import PlayerActivity
import PlayerSuccess
import PyGameData
@@ -304,9 +303,6 @@
        else:
            for itemID, itemCnt in totalItemDict.items(): 
                ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
    #if Def_TJGRecoverID in recoverCntDict:
    #    #脱机挂经验找回后重置
    #    PlayerTJG.ResetTJGDeadInfo(curPlayer)
    if Def_QueenRelics in recoverCntDict:
        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelicsEx, recoverCntDict[Def_QueenRelics])
    DataRecordPack.DR_PlayerRecover(curPlayer, recoverWay, recoverCntDict, totalExp, totalMoney, totalSP, totalItemDict)        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -45,7 +45,6 @@
import PetControl
import ItemControler
import PlayerGuaji
import PlayerTJG
import AICommon
import PlayerSuccess
import CrossPlayerData
@@ -58,8 +57,6 @@
import PlayerFlashSale
import PlayerChatBox
import PlayerFace
import PlayerWing
import ChEquip
import PlayerYinji
import PlayerActivity
import PlayerBackup
@@ -1274,8 +1271,6 @@
    #副本相关时间处理
    PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
    
    #脱机计算
    #PlayerTJG.ProcessPlayerTJG(curPlayer, tick)
    #挂机收益
    PlayerGuaji.ProcessGuaji(curPlayer)
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTJG.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCache.py
@@ -160,7 +160,7 @@
    lastUpdTick = curPlayer.GetDictByKey(Key_UpdViewCacheTick)
    tick = GameWorld.GetGameWorld().GetTick()
    if lastUpdTick and tick - lastUpdTick < 60000:
        GameWorld.DebugLog("1分钟内只更新一次玩家缓存", playerID)
        #GameWorld.DebugLog("1分钟内只更新一次玩家缓存", playerID)
        return
    curPlayer.SetDict(Key_UpdViewCacheTick, tick)
    return UpdPlayerViewCache(curPlayer)
@@ -180,7 +180,7 @@
    
    tick = GameWorld.GetGameWorld().GetTick()
    curPlayer.SetDict(Key_UpdViewCacheTick, tick)
    GameWorld.DebugLog("更新玩家查看缓存数据! isOffline=%s" % isOffline, playerID)
    #GameWorld.DebugLog("更新玩家查看缓存数据! isOffline=%s" % isOffline, playerID)
    curCache.SetAccID(curPlayer.GetAccID())
    curCache.SetPlayerName(curPlayer.GetPlayerName())
    curCache.SetLV(curPlayer.GetLV())
@@ -219,11 +219,10 @@
def UpdPlayerViewCacheByDB(playerID):
    '''更新玩家查看缓存数据,直接从db数据更新,仅更新dbPlayer表有的属性,
    '''
    GameWorld.DebugLog("UpdPlayerViewCacheByDB", playerID)
    curCache = None
    dbPlayer = PyMongoMain.GetUserCtrlDB().findDBPlayer(playerID)
    if not dbPlayer:
        GameWorld.DebugLog("1111111111111111", playerID)
        GameWorld.ErrLog("UpdPlayerViewCacheByDB找不到玩家!", playerID)
        return curCache
    viewCacheMgr = DBDataMgr.GetPlayerViewCacheMgr()
    curCache = viewCacheMgr.GetPlayerViewCache(playerID)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
@@ -411,7 +411,7 @@
        if resultSet and resultSet.count():
            for resultDict in resultSet:
                PyGameData.g_dbPlayerIDMap[resultDict["PlayerID"]] = resultDict["AccID"]
        GameWorld.Log("启动服务器加载DBPlayer玩家账号ID对应关系! %s, %s" % (len(PyGameData.g_dbPlayerIDMap), PyGameData.g_dbPlayerIDMap))
        GameWorld.Log("启动服务器加载DBPlayer玩家账号ID对应关系! %s" % (len(PyGameData.g_dbPlayerIDMap)))
        return
    
    def findDBPlayer(self, playerID):
@@ -2431,7 +2431,7 @@
        mylog.debug('insert role ok!accid = %s, PlayerName = %s'%(createPlayer.AccID, createPlayer.PlayerName))
        PyGameData.g_dbPlayerIDMap[newPlayerID] = createPlayer.AccID
        mylog.debug('PyGameData.g_dbPlayerIDMap = %s, %s'%(len(PyGameData.g_dbPlayerIDMap), PyGameData.g_dbPlayerIDMap))
        mylog.debug('PyGameData.g_dbPlayerIDMap = %s'%(len(PyGameData.g_dbPlayerIDMap)))
        
        #构造其他角色初始数据
        itemData = ''
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -21,7 +21,6 @@
import SkillShell
import PassiveBuffEffMng
import ChNetSendPack
import PlayerTJG
import OperControlManager
import GameObj
import CrossPlayerData
@@ -654,7 +653,6 @@
    beforeHP = GameObj.GetHP(curObj)
    
    index = 0
    isPlayerTJG = (curObj.GetGameObjType() == IPY_GameWorld.gotPlayer and PlayerTJG.GetIsTJG(curObj))
    
    skillIDListInDelBuff = []   # buff消失中需要处理添加buff,外层处理避免错乱
    
@@ -669,12 +667,6 @@
        #填表,持续时间为0的Buff为永久Buff
        if not curSkill.GetLastTime() and not curBuffRemainTime:
            index += 1
            continue
        if isPlayerTJG and curSkill.GetSkillTypeID() in ChConfig.TJGStateNotRefreshTimeBuff:
            curBuff.SetCalcStartTick( tick )
            index += 1
            #GameWorld.DebugLog("脱机挂状态下不刷新buff时间: skillTypeID=%s" % curSkill.GetSkillTypeID())
            continue
        
        remainTime = curBuffRemainTime - ( tick - curBuff.GetCalcStartTick() )