hxp
7 天以前 0b314dd1d9f0c39e8d86de7e996c62836aa19aca
16 卡牌服务端(删除翅膀;)
10个文件已修改
5个文件已删除
1965 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py 530 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetNPCHP.py 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetNPCKillDrop.py 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetWingJL.py 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 411 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_513.py 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -431,14 +431,6 @@
    list        AttrPerStarAddList;    //每星加成值列表
};
//技能搭配表
struct    tagSkillMatch
{
    BYTE        _IDIndex;
    list        Skills;    //主动技能(职业1id|职业2id)
};
//灵根表 #tagRolePoint
struct    tagRolePoint
@@ -1064,112 +1056,6 @@
    dict        AttrExDict;    //特殊属性值字典 {attrKey:value, ...}
};
//成长型境界怪物表
struct tagNPCRealmStrengthen
{
    DWORD        _NPCID;    //NPCID
    BYTE        _RealmDifficulty;    //境界难度
    DWORD        MapID;
    DWORD        LV;    //NPC等级
    DWORD        Exp;//基础经验
    WORD        MaxDrapLV;//玩家最大可掉落等级
    BYTE        EquipClassLV;    //掉落装备阶
    DWORD        DropMoneyMin;//最小金币
    DWORD        DropMoneyMax;//最大金币
    WORD        LowLV;    // 推荐最低等级
    WORD        HighestLV;    // 推荐最高等级
    DWORD        Defense;    // 推荐防御
    DWORD        MDef;    // 标准击杀时间/毫秒
    DWORD        FireDef;    // 脱机挂经验计算战力
    DWORD        SP;    // SP
};
//NPC时间掉血表
struct tagNPCTimeLostHP
{
    DWORD        _NPCID;    //NPCID
    DWORD        LostHPPerSecond;    //单人每秒掉血量
    BYTE        MaxPlayerCount;    //最大人数
    DWORD        LostHPPerSecondEx;    //每增加一人附加掉血量
    BYTE        FightPowerMinByLV;    //标准战力是否取等级表
    DWORD        FightPowerMin;    //标准战力
    DWORD        FightPowerMax;    //上限战力
    DWORD        EveryFightPower;    //每x点战力
    DWORD        EveryFightPowerLostHPEx;    //每x点战力附加伤害
};
//装备套装属性表
struct tagEquipSuitAttr
{
    WORD        _SuiteID;    //套装ID
    BYTE        SuiteCnt;    //套装件数
    BYTE        Star;    //星数
    dict        AttrInfo;    //属性
    DWORD        SkillID;    //技能ID
    BYTE        IsNotify;    //是否广播
    WORD        ActivateIndex;    //激活索引
};
//羽翼精炼属性表
struct tagWingRefineAttr
{
    BYTE        _WingClassLV;    //翅膀阶级
    dict        AttrInfo;    //精炼属性信息
    dict        ItemColorInfo;    //精炼经验对应颜色信息
    DWORD        MaxRefineExp;    //本阶最大精炼值
};
//羽翼精炼经验表
struct tagWingRefineExp
{
    DWORD        _ItemID;    //精炼物品ID
    DWORD        RandExpMin;    //最小随机精炼值
    DWORD        RandExpMax;    //最大随机精炼值
    dict        ExpMaterial; //翅膀代数对应精炼值
};
//NPC掉落表
struct tagNPCDropItem
{
    DWORD        _NPCID;    //NPCID
    WORD        MaxWorldLV;    //最大世界等级,0为不限制,不受最大掉落等级影响
    WORD        MaxDropLV;    //最大可掉落的玩家等级, 不影响世界等级
    BYTE        CanDropRatePlus;    //额外提升掉率的是否有效
    BYTE        IsDropJobSelf;    //是否只掉落本职业
    list        PieRateDrop;    //饼图概率掉落信息 [(概率,0),(概率,(阶,颜色)),...]
    BYTE        PieRateDoCnt;    //饼图概率执行次数
    dict        IndepRateDrop;    //独立概率掉落信息 {(阶,颜色):概率,...}
    BYTE        IndepRateDoCnt;        //独立概率执行次数
    dict        EquipColorMaxDropCount;    //装备颜色最大掉落物品数 {颜色:上限数量,...}
    list        TianxuanEquipRateList;    //天玄丹装备掉落饼图 [[概率,(阶,品质)], ...]
    dict        EquipColorSuitInfo;    //装备颜色对应套装概率 {颜色:套装概率, ...}
    dict        EquipPartKeyRateInfo;    //装备部位集合信息 {(颜色,是否套装):部位集合key, ...}
    BYTE        ColorSuitPartOptimization;    //部位颜色套评分优选掉落,十位代表颜色,个位代表套装
    dict        KillCountDropEquipPub;    //第x次击杀附加必掉装备 {次数:[阶,颜色,是否套装,部位集合key], ...}
    dict        ItemIDDropRate;    //指定物品ID掉率信息 {物品ID:概率, ...}
    dict        TianxuanItemIDRate;    //天玄丹指定ID概率 {物品ID:概率, ...}
    dict        ItemIDMaxDropCount;    //指定物品ID最大掉落个数,没配默认1次 {物品ID:随机次数,...}
    dict        ItemKeyDropRate;    //物品ID集合Key概率, 随机一个, 优先级低 {物品ID集合key:概率, ...}
    dict        ItemKeyDropRateJob;    //物品ID集合Key概率, 自身职业, 优先级高 {物品ID集合key:概率, ...}
    dict        TianxuanItemKeyRate;    //天玄丹指定ID集合Key概率{物品ID集合key:概率, ...}
    dict        ItemKeyMaxDropCount;    //物品ID集合Key随机次数,没配默认1次 {物品ID集合key:随机次数,...}
    BYTE        DropMoneyDoCnt;        //掉落金币执行次数
    WORD        DropMoneyRate;        //掉落金币概率
    WORD        DropMoneyMin;        //掉落金币最小值
    WORD        DropMoneyMax;        //掉落金币最大值
    dict        KillCountDropPub;    //击杀次数必掉(公共){击杀次数:[[物品ID, ...], [随机物品ID, ...]], ...}
    list        KillCountDropPri;    //击杀次数必掉(私有)[击杀次数,[物品ID,...],是否直接放入背包]
    list        PriItemIDDrop;        //所有归属者私有掉落物品ID列表,每人一份,默认绑定,没有职业区分[物品ID, ...]
    BYTE        AucionItemCanSell;    //掉落拍品可否上架集市
};
//符印塔表
struct tagRuneTower
@@ -1242,58 +1128,6 @@
    BYTE        ADCntMax;    //每日次数
    list        ADAwardItemList;    //广告奖励物品列表
    DWORD        ADMapID;    //对应副本ID,默认给该副本1次次数
};
//装备评分属性系数表
struct tagEquipGSParam
{
    BYTE        _ClassLV;        // 装备阶级
    BYTE        _EquipColor;    // 装备颜色
    BYTE        _IsSuit;    // 是否套装
    BYTE        _ItemQuality;    //物品星级
    DWORD        BaseEquipMaxHPAddPerC;    // 基础防具生命百分比系数
    DWORD        BaseEquipAtkAddPerC;    // 基础武器攻击百分比系数
    DWORD        SuperHitC;    // 暴击值系数
    DWORD        SuperHitPerC;    // 暴击值百分比系数
    DWORD        LuckyHitRateC;    // 会心一击率系数
    DWORD        LuckyHitRateReduceC;    // 会心一击抗性系数
    DWORD        LuckPerC;    // 气运百分比系数
    DWORD        PerLVAtkC;    // 每级增加攻击力系数
    DWORD        PerLVMaxHPC;    // 每级增加生命值系数
    DWORD        DropMoneyPerC;    // 增加掉落金币量百分比系数
    DWORD        SuperHitReduceC;    // 暴击减伤百分比系数
    DWORD        SuperHitRateReduceC;    // 暴击抗性系数
    DWORD        HitC;    // 命中系数
    DWORD        MissC;    // 闪避系数
    DWORD        PetDamPerC;    // 灵宠增伤百分比系数
    DWORD        MaxHPPerC;    // 生命加成系数
    DWORD        AtkPerC;    // 攻击加成系数
    DWORD        SkillAtkRateC;    // 技能加成系数
    DWORD        SkillAtkRateReduceC;    // 技能减免系数
    DWORD        SkillAddPer1C;    // 技能伤害增强1系数
    DWORD        SkillAddPer2C;    // 技能伤害增强2系数
    DWORD        SkillAddPer3C;    // 技能伤害增强3系数
    DWORD        SkillAddPer4C;    // 技能伤害增强4系数
    DWORD        SkillAddPer5C;    // 技能伤害增强5系数
    DWORD        SkillAddPer6C;    // 技能伤害增强6系数
    DWORD        SkillAddPer7C;    // 技能伤害增强7系数
    DWORD        SkillReducePer1C;    // 受到技能伤害减少1系数
    DWORD        SkillReducePer2C;    // 受到技能伤害减少2系数
    DWORD        SkillReducePer3C;    // 受到技能伤害减少3系数
    DWORD        SkillReducePer4C;    // 受到技能伤害减少4系数
    DWORD        SkillReducePer5C;    // 受到技能伤害减少5系数
    DWORD        SkillReducePer6C;    // 受到技能伤害减少6系数
    DWORD        SkillReducePer7C;    // 受到技能伤害减少7系数
    DWORD        ReduceSkillCDPerC;    // 减少所有技能CD系数
    DWORD        LuckyHitPerC;    // 会心伤害加成系数
    DWORD        FaintDefRateC;    // 控制抵抗系数
    DWORD        SuperHitRateC;    // 暴击率加成系数
    DWORD        IgnoreDefRateC;    // 无视防御系数
    DWORD        IgnoreDefRateReduceC;    // 无视防御减免系数
    DWORD        ProDefPerC;    // 防护百分比系数
    DWORD        FinalHurtPerC;    // 最终伤害加成系数
    DWORD        FinalHurtReducePerC;    // 最终伤害减免系数
};
//成就表
@@ -2062,15 +1896,6 @@
    WORD    LowLV;    // 推荐最低等级
    WORD    HighestLV;    // 推荐最高等级
    DWORD    Defense;    // 推荐防御
};
//天赋技能表
struct tagTalentSkill
{
    DWORD        _SkillID;    //技能ID
    BYTE        TalentType;    //天赋类型
    BYTE        Series;    //天赋系别
};
//限时抢购表
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -816,18 +816,6 @@
PacketSubCMD_2=0x20
PacketCallFunc_2=OnCoatDecompose
;羽翼精炼
[PlayerWing]
ScriptName = Player\PlayerWing.py
Writer = sgj
Releaser = sgj
RegType = 0
RegisterPackCount = 1
PacketCMD_1=0xA3
PacketSubCMD_1=0x2E
PacketCallFunc_1=OnWingJingLian
;新定义攻击
[NewAttack]
ScriptName = Skill\SkillShell.py
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -720,11 +720,9 @@
#Def_ItemEff_WeaponType = 2808   # 武器类型分类(非物品类型)
#Def_ItemEff_Flower = 2816   # 鲜花
#Def_Effect_AddMagicJifen = 1916      #使用道具给予幸运宝藏积分
#Def_Effect_WingSkin = 1918   #翅膀皮肤
#Def_Effect_AddSkyGodExp = 2854   #增加天神经验 A值天神经验
#Def_Effect_SummonNPC = 2855   #召唤NPC A值NPCID B值持续时间 C值是否不删除物品,默认0删除
#Def_Effect_AddOfficialExp = 2859   #增加爵位经验
#Def_Effect_AddWingClassLV = 2862   #增加翅膀阶级 A值: N阶及N阶以下使用时翅膀直接升一阶; B值:是否保留祝福值
#---------------------------------------------------------------------
Def_Max_Update_Talent_Time = 3    #最大使用造化丹次数
@@ -2465,21 +2463,6 @@
## 装备位 - 灵器
EquipPlace_LingQi = []
#装备物品位置,不需要重刷属性
EquipItemNoRefreshState = [
    ShareDefine.retHorse,        #19 坐骑
    ShareDefine.retWeaponSkin,   #20 时装武器
    ShareDefine.retClothesSkin,  #21 时装衣服
    ShareDefine.retWeapon2Skin,  #22 时装副手
                           ]
# 需要广播外观的装备部位(除了境界装备3部位)
Def_SyncEquipStateByIndex = [
    ShareDefine.retWing,        #13 翅膀
    ShareDefine.retGuard1,    #14 守护1
    ShareDefine.retHorse,        #19 坐骑
                             ]
#---------------------------------------------------------------------
#特殊物品光环,永久存在
Def_SuperBuffList = []
@@ -4199,8 +4182,6 @@
) = range(1001, 1091)
#不可以佩戴翅膀的地图
CanNotWearWingMapIDList = []
#不可以佩戴武器时装的地图
CanNotWearWeaponCoatMapIDList = []
#不可以使用恢复物品或技能的地图
@@ -4550,7 +4531,7 @@
ItemDel_EquipDecompose, # 装备分解
ItemDel_20, # 捐献装备 20
ItemDel_Treasure, # 寻宝
ItemDel_WingExp, # 翅膀精炼经验
ItemDel_22, # 翅膀精炼经验
ItemDel_StoneUpgrade, # 宝石升级
ItemDel_ItemCompound, # 合成
ItemDel_Horse, # 坐骑 25
@@ -4599,7 +4580,6 @@
                   ItemDel_AddBourseItem:"AddBourseItem",
                   ItemDel_EquipDecompose:"EquipDecompose",
                   ItemDel_Treasure:"Treasure",
                   ItemDel_WingExp:"WingExp",
                   ItemDel_StoneUpgrade:"StoneUpgrade",
                   ItemDel_ItemCompound:"ItemCompound",
                   ItemDel_Horse:"Horse",
@@ -4635,53 +4615,6 @@
FB_JoinType_Multi, # 多人
FB_JoinType_Help, # 助战
) = range(4)
# 自定义任务事件记录 custom_mission_event
CME_Log_Type_List = (
CME_Log_Start, # 开始
CME_Log_End, # 结束
CME_Log_Acceptable, # 可接, 仅在OnDay及功能开启的时候发送
) = range(3)
CME_Type_List = (
CME_Known, # δ֪ 0
CME_FB_XXX1, # 1
CME_FB_XXX2, # 2
CME_FB_3,
CME_FB_XXX4, # 4
CME_FB_XXX5, # 5
CME_FB_XXX6, # 6
CME_FB_XXX7, # 7
CME_FB_XXX8, # 8
CME_FB_XXX9, # 9
CME_FB_XXX10, # 10
CME_FB_XXX11, # 11
CME_Class_Horse, # 坐骑阶级
CME_Class_Wing, # 翅膀阶级
CME_Class_Official, # 爵位阶级
CME_Class_XXX15, # 废弃 15
CME_Class_XXX16, # 废弃
CME_FB_XXX17, #17
CME_FB_XXX18, #18
CME_FB_XXX19, #19
CME_FB_XXX20,  #20
CME_FB_XXX21,  #21
CME_FB_XXX22,  #22
CME_FB_RunDaily,  #日常跑环,只记录可接
CME_FB_RunFamily,  #战盟跑环,只记录可接
) = range(3,28) # 后台只收集ID改成从3开始,不然会和任务1冲突
CME_Type_Dict = {
CME_Known:"δ֪",
CME_Class_Horse:"坐骑",
CME_Class_Wing:"翅膀",
CME_Class_Official:"爵位",
CME_FB_RunDaily:"日常跑环",
CME_FB_RunFamily:"战盟跑环",
}
# 需要发送到任务事件扩展记录的类型 ShareDefine.Def_UserAction_ExMissionLog
CME_Ex_Log_List = [CME_Class_Horse, CME_Class_Wing, CME_Class_Official]
# 竖杠
Def_Str_Montant = "|"
@@ -4855,21 +4788,6 @@
InvestType_Boss, # Boss 11
InvestType_Life, # 终身卡 12
) = range(7, 7 + 6)
# 法宝特权
MWPrivilegeList = (
MWPrivilege_FixedAttr, # 本源之魂(固定属性)
MWPrivilege_SealDemonAddAttr, # 封魔坛每进入1次增加攻击
MWPrivilege_EquipPlus, # 强化之魂
MWPrivilege_RuneDecompose, # 符印分解经验加成
MWPrivilege_Horse, # 坐骑每提升5级攻击提升点数
MWPrivilege_Pet, # 每激活1只宠物,生命上限提升
MWPrivilege_MWSkillUp, # 每提升5级技能潜力,真实伤害+200(最高18000)
MWPrivilege_WingHP, # 翅膀生命属性+30%
MWPrivilege_EquipSuit, # 套装基础属性+20%
MWPrivilege_EquipWash, # 每日免费领取50个洗练石
MWPrivilege_SignDayAddAttr, # 每日签到加属性 11
) = range(1,11+1)
(
tttLeaveMap, # 退出倒计时 0
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -3961,73 +3961,6 @@
#------------------------------------------------------
#A3 2E 羽翼精炼 #tagCMWingUp
class  tagCMWingUp(Structure):
    Head = tagHead()
    Count = 0    #(BYTE Count)//索引个数
    WingIndexList = list()    #(vector<BYTE> WingIndexList)//材料翅膀在背包中的索引列表
    data = None
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x2E
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.Count):
            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
            self.WingIndexList.append(value)
        return _pos
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA3
        self.Head.SubCmd = 0x2E
        self.Count = 0
        self.WingIndexList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 1 * self.Count
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.Count)
        for i in range(self.Count):
            data = CommFunc.WriteBYTE(data, self.WingIndexList[i])
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                Count:%d,
                                WingIndexList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Count,
                                "..."
                                )
        return DumpString
m_NAtagCMWingUp=tagCMWingUp()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWingUp.Head.Cmd,m_NAtagCMWingUp.Head.SubCmd))] = m_NAtagCMWingUp
#------------------------------------------------------
#A4 06 变更家族成员加入审核方式#tagCGChangeFamilyAcceptJoinType
class  tagCGChangeFamilyAcceptJoinType(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/EventReport.py
@@ -707,95 +707,6 @@
                PlayerControl.GetMoneyReal(curPlayer, type_name), json.dumps(extraDict, ensure_ascii=False)), curPlayer)
    return
## 写任务事件记录
#  @param startType: 0 任务开始 1 任务结束
#  @param isFinish: 当任务结束,任务结果 0:失败 1:成功
#  @param failReason: 当任务结束且任务失败时的原因
def WriteEvent_mission_log(curPlayer, missionData, startType, isFinish=0, failReason=""):
    if startType not in [0, 1] or isFinish not in [0, 1]:
        return
    if not missionData:
        return
    #missionName = "0%s%s" % (missionData.ID, missionData.Name)
    missionName = missionData.ID
    __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason)
    return
def WriteEvent_MWSuccess(curPlayer, mwID, succID, logType, isFinish=0):
    '''写自定义任务 - 法宝成就事件, 事件ID格式:  91+法宝ID+至少4位的成就ID
    '''
    cmeType = "91%d%04d" % (mwID, succID)
    WriteEvent_custom_mission_log(curPlayer, cmeType, logType, isFinish)
    return
def WriteEvent_FB(curPlayer, mapID, funcLineID, logType, joinType=0, isFinish=0, failReason=""):
    '''写自定义任务 - 副本事件, 事件ID格式: 90+mapID+joinType+funcLineID
    @param joinType: 0-默认无; 1-单人; 2-多人; 3-助战;   注意单人队伍算单人
    '''
    cmeType = "90%d%d%02d" % (mapID, joinType, funcLineID)
    WriteEvent_custom_mission_log(curPlayer, cmeType, logType, isFinish, failReason=failReason)
    return
## 写自定义任务事件记录
#  @param cmeType: 自定义类型, 对应 ChConfig.CME_Type_List
#  @param logType: 记录类型, 对应 ChConfig.CME_Log_Type_List
#  @param cmeInfoEx: 扩展自定义信息, 一般用于需要分子项记录的类型
#  @param isFinish: 当事件结束时结果 0:失败 1:成功
#  @param failReason: 当事件结束时失败的原因
def WriteEvent_custom_mission_log(curPlayer, cmeType, logType, isFinish=0, failReason="", cmeInfoEx=None):
    #if cmeType not in ChConfig.CME_Type_List:
    #    return
    if logType not in ChConfig.CME_Log_Type_List:
        return
    startType = 1 if logType == ChConfig.CME_Log_End else 0
    #===========================================================================
    # missionName = ChConfig.CME_Type_Dict.get(cmeType, "δ֪")
    # if cmeInfoEx != None:
    #    missionName = "%s:%s" % (missionName, cmeInfoEx)
    # if logType == ChConfig.CME_Log_Acceptable:
    #    missionName = "%s_可挑战" % missionName
    #===========================================================================
    missionName = cmeType
    __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason, cmeType in ChConfig.CME_Ex_Log_List)
    return
## 写任务事件记录
#  @param startType: 0 任务开始 1 任务结束
#  @param missionName: 任务名
#  @param isFinish: 当任务结束,任务结果 0:失败 1:成功
#  @param failReason: 当任务结束且任务失败时的原因
def __WriteEvent_mission_log(curPlayer, startType, missionName, isFinish, failReason, isExLog=False):
    isFinish = 1 if isFinish else 0
    exDict = {"Fail":failReason}
    resultMsg = json.dumps(exDict, ensure_ascii=False)
    EventReport(ShareDefine.Def_UserAction_MissionLog,
                "MissionStep=%s&MissionID=%s&MissionResult=%s&MissionExtra=%s"%(startType, missionName, isFinish, resultMsg), curPlayer)
    #===========================================================================
    # missionlogEvent = missionlog()
    # missionlogEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # missionlogEvent.scribeEventName = ShareDefine.Def_UserAction_ExMissionLog if isExLog else \
    #                                    ShareDefine.Def_UserAction_MissionLog
    # missionlogEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # missionlogEvent.chr_level = GetScribeEvent_chr_level(curPlayer)
    # missionlogEvent.type = startType
    # missionlogEvent.mission_name = missionName
    # missionlogEvent.session_id = GameWorld.GetSessionID(curPlayer)
    #
    # missionlogEvent.ip = curPlayer.GetIP()
    # missionlogEvent.account_name = missionlogEvent.account_id
    # missionlogEvent.account_type = GameWorld.GetAccountType(curPlayer)
    # missionlogEvent.chr_name = curPlayer.GetPlayerName()
    # missionlogEvent.mission_result = isFinish
    # missionlogEvent.mission_reason = failReason
    # WriteEvent(missionlogEvent)
    #===========================================================================
    return
def WriteEvent_level_up(curPlayer):
    EventReport(ShareDefine.Def_UserAction_LVUP, "", curPlayer)
    #===========================================================================
@@ -812,180 +723,11 @@
    #===========================================================================
    return
def WriteEvent_chat_log(curPlayer, content, cmc_name, tagName="", addinfo=""):
    return
    #===========================================================================
    # '''
    # @todo: 写聊天监控记录
    # @param content: 聊天内容
    # @param cmc_name: 聊天频道标识
    # @param tagName: 私聊对象
    # @param addinfo: 额外信息
    # '''
    # chatlogEvent = chat_log()
    # chatlogEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # chatlogEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # chatlogEvent.chr_name = curPlayer.GetName()
    # chatlogEvent.content = __GetEventChatContent(content)
    # chatlogEvent.cmc_name = cmc_name
    # chatlogEvent.ip = curPlayer.GetIP()
    # chatlogEvent.account_name = chatlogEvent.account_id
    # chatlogEvent.account_type = GameWorld.GetAccountType(curPlayer)
    # chatlogEvent.chr_level = GetScribeEvent_chr_level(curPlayer)
    # chatlogEvent.object = tagName
    # chatlogEvent.addinfo = addinfo
    # WriteEvent(chatlogEvent)
    #===========================================================================
    return
def __GetEventChatContent(content):
    '''
    <a color="255,255,0" href="GOTO 10000,74,60">[地图:暮光之城(74,60)]</a>
    <A color="205,0,0" onmouseover="ShowInfo ITEM,55986" DATA="07 04 01 00 B2 DA 00 00 00 01 00 01
        28 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 3C 00 00 00 7B 27 32 38 27 3A 5B
        27 31 30 32 33 34 27 5D 2C 27 31 39 27 3A 5B 27 33 35 34 27 2C 27 38 35 36 27 2C 27 33 35
        34 27 2C 27 37 35 38 27 2C 27 39 35 31 27 2C 27 31 30 35 32 27 5D 7D 04 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 ">[神圣的傲世之弓 +40]</a>
    '''
    tempMatch = re.search("<a color=.*?>.*?</a>", content)
    if tempMatch:
        tempStr = tempMatch.group()
        markIndex = tempStr.index(">") + 1
        repStr = tempStr[markIndex:tempStr.index("<", markIndex)]
        content = content.replace(tempStr, repStr)
    tempMatch = re.search("<A color=.*?>.*?</a>", content)
    if tempMatch:
        tempStr = tempMatch.group()
        markIndex = tempStr.index(">") + 1
        repStr = tempStr[markIndex:tempStr.index("<", markIndex)]
        content = content.replace(tempStr, repStr)
    # 替换换行
    content = content.replace("\r", "")
    content = content.replace("\n", "")
    return content
## 写自定义事件记录
#  @param event_name: 事件名称
#  @param comments: 备注或附加信息
def WriteEvent_custom_events(curPlayer, event_name, comments):
    #===========================================================================
    # customEvent = custom_events()
    # customEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # customEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # customEvent.event_name = event_name
    # customEvent.session_id = GameWorld.GetSessionID(curPlayer)
    #
    # customEvent.ip = curPlayer.GetIP()
    # customEvent.account_name = customEvent.account_id
    # customEvent.account_type = GameWorld.GetAccountType(curPlayer)
    # customEvent.chr_name = curPlayer.GetPlayerName()
    # customEvent.chr_level = GetScribeEvent_chr_level(curPlayer)
    # customEvent.comments = CommFunc.GetStrCutoff(comments, 255)
    # WriteEvent(customEvent)
    #===========================================================================
    return
def GetScribeEvent_chr_level(curPlayer):
    transCnt, showLV = GameWorld.GetClientLV(curPlayer)
    return transCnt * 1000 + showLV
## -------------------------------------- 扩展自定义 ---------------------------------------
class horse_class(ScribeEvent):
    # 坐骑进阶记录
    def __init__(self):
        #必须字段
        super(horse_class, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.bef_class_lv = 0 # 此次进阶操作前的坐骑等阶, 0代表1阶
        self.bef_exp = 0 # 此次进阶操作前的坐骑等阶星数的经验值
        self.cost_item_cnt = 0 # 此次进阶消耗的进阶道具数量
        self.aft_class_lv = 0 # 此次进阶操作后的坐骑等阶, 0代表1阶
        self.aft_exp = 0 # 此次进阶操作后的坐骑等阶星数的经验值
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   str(self.bef_class_lv), str(self.bef_exp), str(self.cost_item_cnt),
                   str(self.aft_class_lv), str(self.aft_exp), self.time]
        return super(horse_class, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_HorseClass
def WriteEvent_horse_class(curPlayer, befClassLV, befExp, costCnt, aftClassLV, aftExp):
    ## 写坐骑进阶记录
    #===========================================================================
    # horseClass = horse_class()
    # horseClass.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # horseClass.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # horseClass.chr_name = curPlayer.GetPlayerName()
    # horseClass.bef_class_lv = befClassLV
    # horseClass.bef_exp = befExp
    # horseClass.cost_item_cnt = costCnt
    # horseClass.aft_class_lv = aftClassLV
    # horseClass.aft_exp = aftExp
    # WriteEvent(horseClass)
    #===========================================================================
    return
class wing_class(ScribeEvent):
    # 翅膀进阶记录
    def __init__(self):
        #必须字段
        super(wing_class, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.bef_class_lv = 0 # 当前翅膀等阶, 0代表1阶
        self.bef_exp = 0 # 进阶操作前的祝福值
        self.cost_item_cnt = 0 # 此次进阶消耗的进阶道具数量
        self.aft_class_lv = 0 # 此次进阶操作后翅膀的等阶, 0代表1阶
        self.aft_exp = 0 # 进阶操作后的祝福值
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   str(self.bef_class_lv), str(self.bef_exp), str(self.cost_item_cnt),
                   str(self.aft_class_lv), str(self.aft_exp), self.time]
        return super(wing_class, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_WingClass
def WriteEvent_wing_class(curPlayer, befClassLV, befExp, costCnt, aftClassLV, aftExp):
    ## 写翅膀进阶记录
    #===========================================================================
    # wingClass = wing_class()
    # wingClass.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # wingClass.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # wingClass.chr_name = curPlayer.GetPlayerName()
    # wingClass.bef_class_lv = befClassLV
    # wingClass.bef_exp = befExp
    # wingClass.cost_item_cnt = costCnt
    # wingClass.aft_class_lv = aftClassLV
    # wingClass.aft_exp = aftExp
    # WriteEvent(wingClass)
    #===========================================================================
    return
class pet_lv(ScribeEvent):
    # 宠物升级记录
@@ -1301,278 +1043,6 @@
    # WriteEvent(coinToGold)
    #===========================================================================
    return
class rune_lv(ScribeEvent):
    # 符印升级记录
    def __init__(self):
        #必须字段
        super(rune_lv, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.rune_name = "" # 符印名称
        self.cost_rune_money = 0 # 此次消耗的符印精华
        self.aft_lv = 0 # 此次操作后的等级, 0代表1级
        self.aft_rune_money = 0 # 此次操作后的符印精华
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   self.rune_name, str(self.cost_rune_money), str(self.aft_lv), str(self.aft_rune_money), self.time]
        return super(rune_lv, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_RuneLV
def WriteEvent_rune_lv(curPlayer, runeName, costruneMoney, aftLV, aftruneMoney):
    ## 写符印升级记录
    #===========================================================================
    # runeLV = rune_lv()
    # runeLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # runeLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # runeLV.chr_name = curPlayer.GetPlayerName()
    # runeLV.rune_name = runeName
    # runeLV.cost_rune_money = costruneMoney
    # runeLV.aft_lv = aftLV
    # runeLV.aft_rune_money = aftruneMoney
    # WriteEvent(runeLV)
    #===========================================================================
    return
class change_name(ScribeEvent):
    # 改名记录
    def __init__(self):
        #必须字段
        super(change_name, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.old_name = "" # 原来的名字
        self.new_name = "" # 新的名字
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   self.old_name, self.new_name, self.time]
        return super(change_name, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_ChangeName
def WriteEvent_change_name(curPlayer, oldName, newName):
    ## 改名记录
    #===========================================================================
    # changeName = change_name()
    # changeName.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # changeName.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # changeName.chr_name = curPlayer.GetPlayerName()
    # changeName.old_name = oldName
    # changeName.new_name = newName
    # WriteEvent(changeName)
    #===========================================================================
    return
class add_zhenqi(ScribeEvent):
    # 真气产出记录
    def __init__(self):
        #必须字段
        super(add_zhenqi, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.eventName = "" # 来源
        self.eventData = "" # 来源附加信息
        self.addValue = 0 # 产出数量
        self.totalValue = 0 # 剩余总量
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   self.eventName, str(self.eventData), str(self.addValue), str(self.totalValue), self.time]
        return super(add_zhenqi, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_AddZhenqi
def WriteEvent_add_zhenqi(curPlayer, eventName, eventData, addValue, totalValue):
    ## 真气产出记录
    #===========================================================================
    # if eventData:
    #    eventData = str(eventData)
    #    eventData = eventData.replace("\"", "'")
    #    eventData = eventData.replace(",", "|")
    #
    # addZhenQi = add_zhenqi()
    # addZhenQi.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # addZhenQi.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # addZhenQi.chr_name = curPlayer.GetPlayerName()
    # addZhenQi.eventName = eventName
    # addZhenQi.eventData = eventData
    # addZhenQi.addValue = addValue
    # addZhenQi.totalValue = totalValue
    # WriteEvent(addZhenQi)
    #===========================================================================
    return
class lost_zhenqi(ScribeEvent):
    # 真气消耗记录
    def __init__(self):
        #必须字段
        super(lost_zhenqi, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.eventName = "" # 消耗点
        self.eventData = "" # 消耗点附加信息
        self.lostValue = 0 # 消耗数量
        self.totalValue = 0 # 剩余总量
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   self.eventName, str(self.eventData), str(self.lostValue), str(self.totalValue), self.time]
        return super(lost_zhenqi, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_LostZhenqi
def WriteEvent_lost_zhenqi(curPlayer, eventName, eventData, lostValue, totalValue):
    ## 真气消耗记录
    #===========================================================================
    # if eventData:
    #    eventData = str(eventData)
    #    eventData = eventData.replace("\"", "'")
    #    eventData = eventData.replace(",", "|")
    #
    # lostZhenQi = lost_zhenqi()
    # lostZhenQi.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # lostZhenQi.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # lostZhenQi.chr_name = curPlayer.GetPlayerName()
    # lostZhenQi.eventName = eventName
    # lostZhenQi.eventData = eventData
    # lostZhenQi.lostValue = lostValue
    # lostZhenQi.totalValue = totalValue
    # WriteEvent(lostZhenQi)
    #===========================================================================
    return
class coat_lv(ScribeEvent):
    # 时装升级记录
    def __init__(self):
        #必须字段
        super(coat_lv, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.coat_name = "" # 时装名称
        self.bef_lv = 0 # 此次进阶操作前的等级
        self.bef_exp = 0 # 此次进阶操作前的经验值
        self.cost_item_cnt = 0 # 此次消耗的道具数量
        self.aft_lv = 0 # 此次操作后的等级, 0代表0级, 1代表+1级
        self.aft_exp = 0 #此次进阶操作后的经验值
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   self.coat_name, str(self.bef_lv), str(self.bef_exp), str(self.cost_item_cnt), str(self.aft_lv), str(self.aft_exp), self.time]
        return super(coat_lv, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_CoatLV
def WriteEvent_coat_lv(curPlayer, coatName, befLV, befExp, costItemCnt, aftLV, aftExp):
    return
    ## 写时装升级记录
    #===========================================================================
    # coatLV = coat_lv()
    # coatLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # coatLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # coatLV.chr_name = curPlayer.GetPlayerName()
    # coatLV.coat_name = coatName
    # coatLV.bef_lv = befLV
    # coatLV.bef_exp = befExp
    # coatLV.cost_item_cnt = costItemCnt
    # coatLV.aft_lv = aftLV
    # coatLV.aft_exp = aftExp
    # WriteEvent(coatLV)
    #===========================================================================
class wingskin_lv(ScribeEvent):
    # 时装升级记录
    def __init__(self):
        #必须字段
        super(wingskin_lv, self).__init__()
        self.account_id = "" # 账号 ID,平台下唯一,且终生不变
        self.chr_name = "" # 玩家角色名
        self.skin_name = "" # 幻化翅膀名称
        self.bef_lv = 0 # 此次进阶操作前的等级
        self.bef_exp = 0 # 此次进阶操作前的经验值
        self.cost_item_cnt = 0 # 此次消耗的道具数量
        self.aft_lv = 0 # 此次操作后的等级, 0代表0级, 1代表+1级
        self.aft_exp = 0 #此次进阶操作后的经验值
        #非必须字段
        #即时是非必须字段也应该传送,各字段用,分隔,并且用双引号包含,参考格式'"1","","","12314"'
        return
    def GetCurEventStr(self):
        if not self.time:
            self.time = GameWorld.GetCurrentDataTimeStr()
        tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.account_id, self.chr_name,
                   self.skin_name, str(self.bef_lv), str(self.bef_exp), str(self.cost_item_cnt), str(self.aft_lv), str(self.aft_exp), self.time]
        return super(wingskin_lv, self).GetEventStr(tmpList)
    def GetScribeEventName(self): return ShareDefine.Def_UserAction_WingSkinLV
def WriteEvent_wingskin_lv(curPlayer, skinName, befLV, befExp, costItemCnt, aftLV, aftExp):
    ## 写幻化翅膀升级记录
    #===========================================================================
    # wingskinLV = wingskin_lv()
    # wingskinLV.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer.GetAccID()))
    # wingskinLV.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID())
    # wingskinLV.chr_name = curPlayer.GetPlayerName()
    # wingskinLV.skin_name = skinName
    # wingskinLV.bef_lv = befLV
    # wingskinLV.bef_exp = befExp
    # wingskinLV.cost_item_cnt = costItemCnt
    # wingskinLV.aft_lv = aftLV
    # wingskinLV.aft_exp = aftExp
    # WriteEvent(wingskinLV)
    #===========================================================================
    return
class horseskin_lv(ScribeEvent):
    # 时装升级记录
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetNPCHP.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetNPCKillDrop.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetWingJL.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -1474,21 +1474,6 @@
    
    return callFunc()
## 获得特殊副本npc掉落金钱
#  @param curPlayer
#  @return None
def OnGetNPCExp(curPlayer, curNPC):
    do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetNPCExp"))
    if not callFunc:
        return 0
    return callFunc(curPlayer, curNPC)
## 获得外层经验倍率
def OnGetOuterExpRate(curPlayer):
    do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -404,11 +404,6 @@
                        ("list", "AttrPerStarAddList", 0),
                        ),
                "SkillMatch":(
                        ("BYTE", "IDIndex", 1),
                        ("list", "Skills", 0),
                        ),
                "RolePoint":(
                        ("BYTE", "AttrID", 1),
                        ("dict", "AddAttrInfoPerPoint", 0),
@@ -877,93 +872,6 @@
                        ("dict", "AttrExDict", 0),
                        ),
                "NPCRealmStrengthen":(
                        ("DWORD", "NPCID", 1),
                        ("BYTE", "RealmDifficulty", 1),
                        ("DWORD", "MapID", 0),
                        ("DWORD", "LV", 0),
                        ("DWORD", "Exp", 0),
                        ("WORD", "MaxDrapLV", 0),
                        ("BYTE", "EquipClassLV", 0),
                        ("DWORD", "DropMoneyMin", 0),
                        ("DWORD", "DropMoneyMax", 0),
                        ("WORD", "LowLV", 0),
                        ("WORD", "HighestLV", 0),
                        ("DWORD", "Defense", 0),
                        ("DWORD", "MDef", 0),
                        ("DWORD", "FireDef", 0),
                        ("DWORD", "SP", 0),
                        ),
                "NPCTimeLostHP":(
                        ("DWORD", "NPCID", 1),
                        ("DWORD", "LostHPPerSecond", 0),
                        ("BYTE", "MaxPlayerCount", 0),
                        ("DWORD", "LostHPPerSecondEx", 0),
                        ("BYTE", "FightPowerMinByLV", 0),
                        ("DWORD", "FightPowerMin", 0),
                        ("DWORD", "FightPowerMax", 0),
                        ("DWORD", "EveryFightPower", 0),
                        ("DWORD", "EveryFightPowerLostHPEx", 0),
                        ),
                "EquipSuitAttr":(
                        ("WORD", "SuiteID", 1),
                        ("BYTE", "SuiteCnt", 0),
                        ("BYTE", "Star", 0),
                        ("dict", "AttrInfo", 0),
                        ("DWORD", "SkillID", 0),
                        ("BYTE", "IsNotify", 0),
                        ("WORD", "ActivateIndex", 0),
                        ),
                "WingRefineAttr":(
                        ("BYTE", "WingClassLV", 1),
                        ("dict", "AttrInfo", 0),
                        ("dict", "ItemColorInfo", 0),
                        ("DWORD", "MaxRefineExp", 0),
                        ),
                "WingRefineExp":(
                        ("DWORD", "ItemID", 1),
                        ("DWORD", "RandExpMin", 0),
                        ("DWORD", "RandExpMax", 0),
                        ("dict", "ExpMaterial", 0),
                        ),
                "NPCDropItem":(
                        ("DWORD", "NPCID", 1),
                        ("WORD", "MaxWorldLV", 0),
                        ("WORD", "MaxDropLV", 0),
                        ("BYTE", "CanDropRatePlus", 0),
                        ("BYTE", "IsDropJobSelf", 0),
                        ("list", "PieRateDrop", 0),
                        ("BYTE", "PieRateDoCnt", 0),
                        ("dict", "IndepRateDrop", 0),
                        ("BYTE", "IndepRateDoCnt", 0),
                        ("dict", "EquipColorMaxDropCount", 0),
                        ("list", "TianxuanEquipRateList", 0),
                        ("dict", "EquipColorSuitInfo", 0),
                        ("dict", "EquipPartKeyRateInfo", 0),
                        ("BYTE", "ColorSuitPartOptimization", 0),
                        ("dict", "KillCountDropEquipPub", 0),
                        ("dict", "ItemIDDropRate", 0),
                        ("dict", "TianxuanItemIDRate", 0),
                        ("dict", "ItemIDMaxDropCount", 0),
                        ("dict", "ItemKeyDropRate", 0),
                        ("dict", "ItemKeyDropRateJob", 0),
                        ("dict", "TianxuanItemKeyRate", 0),
                        ("dict", "ItemKeyMaxDropCount", 0),
                        ("BYTE", "DropMoneyDoCnt", 0),
                        ("WORD", "DropMoneyRate", 0),
                        ("WORD", "DropMoneyMin", 0),
                        ("WORD", "DropMoneyMax", 0),
                        ("dict", "KillCountDropPub", 0),
                        ("list", "KillCountDropPri", 0),
                        ("list", "PriItemIDDrop", 0),
                        ("BYTE", "AucionItemCanSell", 0),
                        ),
                "RuneTower":(
                        ("DWORD", "ID", 1),
                        ("DWORD", "RunePoint", 0),
@@ -1017,55 +925,6 @@
                        ("BYTE", "ADCntMax", 0),
                        ("list", "ADAwardItemList", 0),
                        ("DWORD", "ADMapID", 0),
                        ),
                "EquipGSParam":(
                        ("BYTE", "ClassLV", 1),
                        ("BYTE", "EquipColor", 1),
                        ("BYTE", "IsSuit", 1),
                        ("BYTE", "ItemQuality", 1),
                        ("DWORD", "BaseEquipMaxHPAddPerC", 0),
                        ("DWORD", "BaseEquipAtkAddPerC", 0),
                        ("DWORD", "SuperHitC", 0),
                        ("DWORD", "SuperHitPerC", 0),
                        ("DWORD", "LuckyHitRateC", 0),
                        ("DWORD", "LuckyHitRateReduceC", 0),
                        ("DWORD", "LuckPerC", 0),
                        ("DWORD", "PerLVAtkC", 0),
                        ("DWORD", "PerLVMaxHPC", 0),
                        ("DWORD", "DropMoneyPerC", 0),
                        ("DWORD", "SuperHitReduceC", 0),
                        ("DWORD", "SuperHitRateReduceC", 0),
                        ("DWORD", "HitC", 0),
                        ("DWORD", "MissC", 0),
                        ("DWORD", "PetDamPerC", 0),
                        ("DWORD", "MaxHPPerC", 0),
                        ("DWORD", "AtkPerC", 0),
                        ("DWORD", "SkillAtkRateC", 0),
                        ("DWORD", "SkillAtkRateReduceC", 0),
                        ("DWORD", "SkillAddPer1C", 0),
                        ("DWORD", "SkillAddPer2C", 0),
                        ("DWORD", "SkillAddPer3C", 0),
                        ("DWORD", "SkillAddPer4C", 0),
                        ("DWORD", "SkillAddPer5C", 0),
                        ("DWORD", "SkillAddPer6C", 0),
                        ("DWORD", "SkillAddPer7C", 0),
                        ("DWORD", "SkillReducePer1C", 0),
                        ("DWORD", "SkillReducePer2C", 0),
                        ("DWORD", "SkillReducePer3C", 0),
                        ("DWORD", "SkillReducePer4C", 0),
                        ("DWORD", "SkillReducePer5C", 0),
                        ("DWORD", "SkillReducePer6C", 0),
                        ("DWORD", "SkillReducePer7C", 0),
                        ("DWORD", "ReduceSkillCDPerC", 0),
                        ("DWORD", "LuckyHitPerC", 0),
                        ("DWORD", "FaintDefRateC", 0),
                        ("DWORD", "SuperHitRateC", 0),
                        ("DWORD", "IgnoreDefRateC", 0),
                        ("DWORD", "IgnoreDefRateReduceC", 0),
                        ("DWORD", "ProDefPerC", 0),
                        ("DWORD", "FinalHurtPerC", 0),
                        ("DWORD", "FinalHurtReducePerC", 0),
                        ),
                "Success":(
@@ -1654,12 +1513,6 @@
                        ("WORD", "LowLV", 0),
                        ("WORD", "HighestLV", 0),
                        ("DWORD", "Defense", 0),
                        ),
                "TalentSkill":(
                        ("DWORD", "SkillID", 1),
                        ("BYTE", "TalentType", 0),
                        ("BYTE", "Series", 0),
                        ),
                "ActFlashSale":(
@@ -2913,16 +2766,6 @@
    def GetInitAttrValueList(self): return self.attrTuple[8] # 初始属性值列表 list
    def GetAttrPerStarAddList(self): return self.attrTuple[9] # 每星加成值列表 list
# 技能搭配表
class IPY_SkillMatch():
    def __init__(self):
        self.attrTuple = None
        return
    def GetIDIndex(self): return self.attrTuple[0] # BYTE
    def GetSkills(self): return self.attrTuple[1] # 主动技能(职业1id|职业2id) list
# 灵根表
class IPY_RolePoint():
    
@@ -3641,123 +3484,6 @@
    def GetAttrSpecDict(self): return self.attrTuple[6] # 特殊属性值字典 {attrKey:value, ...} dict
    def GetAttrExDict(self): return self.attrTuple[7] # 特殊属性值字典 {attrKey:value, ...} dict
# 成长型境界怪物表
class IPY_NPCRealmStrengthen():
    def __init__(self):
        self.attrTuple = None
        return
    def GetNPCID(self): return self.attrTuple[0] # NPCID DWORD
    def GetRealmDifficulty(self): return self.attrTuple[1] # 境界难度 BYTE
    def GetMapID(self): return self.attrTuple[2] # DWORD
    def GetLV(self): return self.attrTuple[3] # NPC等级 DWORD
    def GetExp(self): return self.attrTuple[4] # 基础经验 DWORD
    def GetMaxDrapLV(self): return self.attrTuple[5] # 玩家最大可掉落等级 WORD
    def GetEquipClassLV(self): return self.attrTuple[6] # 掉落装备阶 BYTE
    def GetDropMoneyMin(self): return self.attrTuple[7] # 最小金币 DWORD
    def GetDropMoneyMax(self): return self.attrTuple[8] # 最大金币 DWORD
    def GetLowLV(self): return self.attrTuple[9] #  推荐最低等级 WORD
    def GetHighestLV(self): return self.attrTuple[10] #  推荐最高等级 WORD
    def GetDefense(self): return self.attrTuple[11] #  推荐防御 DWORD
    def GetMDef(self): return self.attrTuple[12] #  标准击杀时间/毫秒 DWORD
    def GetFireDef(self): return self.attrTuple[13] #  脱机挂经验计算战力 DWORD
    def GetSP(self): return self.attrTuple[14] #  SP DWORD
# NPC时间掉血表
class IPY_NPCTimeLostHP():
    def __init__(self):
        self.attrTuple = None
        return
    def GetNPCID(self): return self.attrTuple[0] # NPCID DWORD
    def GetLostHPPerSecond(self): return self.attrTuple[1] # 单人每秒掉血量 DWORD
    def GetMaxPlayerCount(self): return self.attrTuple[2] # 最大人数 BYTE
    def GetLostHPPerSecondEx(self): return self.attrTuple[3] # 每增加一人附加掉血量 DWORD
    def GetFightPowerMinByLV(self): return self.attrTuple[4] # 标准战力是否取等级表 BYTE
    def GetFightPowerMin(self): return self.attrTuple[5] # 标准战力 DWORD
    def GetFightPowerMax(self): return self.attrTuple[6] # 上限战力 DWORD
    def GetEveryFightPower(self): return self.attrTuple[7] # 每x点战力 DWORD
    def GetEveryFightPowerLostHPEx(self): return self.attrTuple[8] # 每x点战力附加伤害 DWORD
# 装备套装属性表
class IPY_EquipSuitAttr():
    def __init__(self):
        self.attrTuple = None
        return
    def GetSuiteID(self): return self.attrTuple[0] # 套装ID WORD
    def GetSuiteCnt(self): return self.attrTuple[1] # 套装件数 BYTE
    def GetStar(self): return self.attrTuple[2] # 星数 BYTE
    def GetAttrInfo(self): return self.attrTuple[3] # 属性 dict
    def GetSkillID(self): return self.attrTuple[4] # 技能ID DWORD
    def GetIsNotify(self): return self.attrTuple[5] # 是否广播 BYTE
    def GetActivateIndex(self): return self.attrTuple[6] # 激活索引 WORD
# 羽翼精炼属性表
class IPY_WingRefineAttr():
    def __init__(self):
        self.attrTuple = None
        return
    def GetWingClassLV(self): return self.attrTuple[0] # 翅膀阶级 BYTE
    def GetAttrInfo(self): return self.attrTuple[1] # 精炼属性信息 dict
    def GetItemColorInfo(self): return self.attrTuple[2] # 精炼经验对应颜色信息 dict
    def GetMaxRefineExp(self): return self.attrTuple[3] # 本阶最大精炼值 DWORD
# 羽翼精炼经验表
class IPY_WingRefineExp():
    def __init__(self):
        self.attrTuple = None
        return
    def GetItemID(self): return self.attrTuple[0] # 精炼物品ID DWORD
    def GetRandExpMin(self): return self.attrTuple[1] # 最小随机精炼值 DWORD
    def GetRandExpMax(self): return self.attrTuple[2] # 最大随机精炼值 DWORD
    def GetExpMaterial(self): return self.attrTuple[3] # 翅膀代数对应精炼值 dict
# NPC掉落表
class IPY_NPCDropItem():
    def __init__(self):
        self.attrTuple = None
        return
    def GetNPCID(self): return self.attrTuple[0] # NPCID DWORD
    def GetMaxWorldLV(self): return self.attrTuple[1] # 最大世界等级,0为不限制,不受最大掉落等级影响 WORD
    def GetMaxDropLV(self): return self.attrTuple[2] # 最大可掉落的玩家等级, 不影响世界等级 WORD
    def GetCanDropRatePlus(self): return self.attrTuple[3] # 额外提升掉率的是否有效 BYTE
    def GetIsDropJobSelf(self): return self.attrTuple[4] # 是否只掉落本职业 BYTE
    def GetPieRateDrop(self): return self.attrTuple[5] # 饼图概率掉落信息 [(概率,0),(概率,(阶,颜色)),...] list
    def GetPieRateDoCnt(self): return self.attrTuple[6] # 饼图概率执行次数 BYTE
    def GetIndepRateDrop(self): return self.attrTuple[7] # 独立概率掉落信息 {(阶,颜色):概率,...} dict
    def GetIndepRateDoCnt(self): return self.attrTuple[8] # 独立概率执行次数 BYTE
    def GetEquipColorMaxDropCount(self): return self.attrTuple[9] # 装备颜色最大掉落物品数 {颜色:上限数量,...} dict
    def GetTianxuanEquipRateList(self): return self.attrTuple[10] # 天玄丹装备掉落饼图 [[概率,(阶,品质)], ...] list
    def GetEquipColorSuitInfo(self): return self.attrTuple[11] # 装备颜色对应套装概率 {颜色:套装概率, ...} dict
    def GetEquipPartKeyRateInfo(self): return self.attrTuple[12] # 装备部位集合信息 {(颜色,是否套装):部位集合key, ...} dict
    def GetColorSuitPartOptimization(self): return self.attrTuple[13] # 部位颜色套评分优选掉落,十位代表颜色,个位代表套装 BYTE
    def GetKillCountDropEquipPub(self): return self.attrTuple[14] # 第x次击杀附加必掉装备 {次数:[阶,颜色,是否套装,部位集合key], ...} dict
    def GetItemIDDropRate(self): return self.attrTuple[15] # 指定物品ID掉率信息 {物品ID:概率, ...} dict
    def GetTianxuanItemIDRate(self): return self.attrTuple[16] # 天玄丹指定ID概率 {物品ID:概率, ...} dict
    def GetItemIDMaxDropCount(self): return self.attrTuple[17] # 指定物品ID最大掉落个数,没配默认1次 {物品ID:随机次数,...} dict
    def GetItemKeyDropRate(self): return self.attrTuple[18] # 物品ID集合Key概率, 随机一个, 优先级低 {物品ID集合key:概率, ...} dict
    def GetItemKeyDropRateJob(self): return self.attrTuple[19] # 物品ID集合Key概率, 自身职业, 优先级高 {物品ID集合key:概率, ...} dict
    def GetTianxuanItemKeyRate(self): return self.attrTuple[20] # 天玄丹指定ID集合Key概率{物品ID集合key:概率, ...} dict
    def GetItemKeyMaxDropCount(self): return self.attrTuple[21] # 物品ID集合Key随机次数,没配默认1次 {物品ID集合key:随机次数,...} dict
    def GetDropMoneyDoCnt(self): return self.attrTuple[22] # 掉落金币执行次数 BYTE
    def GetDropMoneyRate(self): return self.attrTuple[23] # 掉落金币概率 WORD
    def GetDropMoneyMin(self): return self.attrTuple[24] # 掉落金币最小值 WORD
    def GetDropMoneyMax(self): return self.attrTuple[25] # 掉落金币最大值 WORD
    def GetKillCountDropPub(self): return self.attrTuple[26] # 击杀次数必掉(公共){击杀次数:[[物品ID, ...], [随机物品ID, ...]], ...} dict
    def GetKillCountDropPri(self): return self.attrTuple[27] # 击杀次数必掉(私有)[击杀次数,[物品ID,...],是否直接放入背包] list
    def GetPriItemIDDrop(self): return self.attrTuple[28] # 所有归属者私有掉落物品ID列表,每人一份,默认绑定,没有职业区分[物品ID, ...] list
    def GetAucionItemCanSell(self): return self.attrTuple[29] # 掉落拍品可否上架集市 BYTE
# 符印塔表
class IPY_RuneTower():
    
@@ -3842,60 +3568,6 @@
    def GetADCntMax(self): return self.attrTuple[1] # 每日次数 BYTE
    def GetADAwardItemList(self): return self.attrTuple[2] # 广告奖励物品列表 list
    def GetADMapID(self): return self.attrTuple[3] # 对应副本ID,默认给该副本1次次数 DWORD
# 装备评分属性系数表
class IPY_EquipGSParam():
    def __init__(self):
        self.attrTuple = None
        return
    def GetClassLV(self): return self.attrTuple[0] #  装备阶级 BYTE
    def GetEquipColor(self): return self.attrTuple[1] #  装备颜色 BYTE
    def GetIsSuit(self): return self.attrTuple[2] #  是否套装 BYTE
    def GetItemQuality(self): return self.attrTuple[3] # 物品星级 BYTE
    def GetBaseEquipMaxHPAddPerC(self): return self.attrTuple[4] #  基础防具生命百分比系数 DWORD
    def GetBaseEquipAtkAddPerC(self): return self.attrTuple[5] #  基础武器攻击百分比系数 DWORD
    def GetSuperHitC(self): return self.attrTuple[6] #  暴击值系数 DWORD
    def GetSuperHitPerC(self): return self.attrTuple[7] #  暴击值百分比系数 DWORD
    def GetLuckyHitRateC(self): return self.attrTuple[8] #  会心一击率系数 DWORD
    def GetLuckyHitRateReduceC(self): return self.attrTuple[9] #  会心一击抗性系数 DWORD
    def GetLuckPerC(self): return self.attrTuple[10] #  气运百分比系数 DWORD
    def GetPerLVAtkC(self): return self.attrTuple[11] #  每级增加攻击力系数 DWORD
    def GetPerLVMaxHPC(self): return self.attrTuple[12] #  每级增加生命值系数 DWORD
    def GetDropMoneyPerC(self): return self.attrTuple[13] #  增加掉落金币量百分比系数 DWORD
    def GetSuperHitReduceC(self): return self.attrTuple[14] #  暴击减伤百分比系数 DWORD
    def GetSuperHitRateReduceC(self): return self.attrTuple[15] #  暴击抗性系数 DWORD
    def GetHitC(self): return self.attrTuple[16] #  命中系数 DWORD
    def GetMissC(self): return self.attrTuple[17] #  闪避系数 DWORD
    def GetPetDamPerC(self): return self.attrTuple[18] #  灵宠增伤百分比系数 DWORD
    def GetMaxHPPerC(self): return self.attrTuple[19] #  生命加成系数 DWORD
    def GetAtkPerC(self): return self.attrTuple[20] #  攻击加成系数 DWORD
    def GetSkillAtkRateC(self): return self.attrTuple[21] #  技能加成系数 DWORD
    def GetSkillAtkRateReduceC(self): return self.attrTuple[22] #  技能减免系数 DWORD
    def GetSkillAddPer1C(self): return self.attrTuple[23] #  技能伤害增强1系数 DWORD
    def GetSkillAddPer2C(self): return self.attrTuple[24] #  技能伤害增强2系数 DWORD
    def GetSkillAddPer3C(self): return self.attrTuple[25] #  技能伤害增强3系数 DWORD
    def GetSkillAddPer4C(self): return self.attrTuple[26] #  技能伤害增强4系数 DWORD
    def GetSkillAddPer5C(self): return self.attrTuple[27] #  技能伤害增强5系数 DWORD
    def GetSkillAddPer6C(self): return self.attrTuple[28] #  技能伤害增强6系数 DWORD
    def GetSkillAddPer7C(self): return self.attrTuple[29] #  技能伤害增强7系数 DWORD
    def GetSkillReducePer1C(self): return self.attrTuple[30] #  受到技能伤害减少1系数 DWORD
    def GetSkillReducePer2C(self): return self.attrTuple[31] #  受到技能伤害减少2系数 DWORD
    def GetSkillReducePer3C(self): return self.attrTuple[32] #  受到技能伤害减少3系数 DWORD
    def GetSkillReducePer4C(self): return self.attrTuple[33] #  受到技能伤害减少4系数 DWORD
    def GetSkillReducePer5C(self): return self.attrTuple[34] #  受到技能伤害减少5系数 DWORD
    def GetSkillReducePer6C(self): return self.attrTuple[35] #  受到技能伤害减少6系数 DWORD
    def GetSkillReducePer7C(self): return self.attrTuple[36] #  受到技能伤害减少7系数 DWORD
    def GetReduceSkillCDPerC(self): return self.attrTuple[37] #  减少所有技能CD系数 DWORD
    def GetLuckyHitPerC(self): return self.attrTuple[38] #  会心伤害加成系数 DWORD
    def GetFaintDefRateC(self): return self.attrTuple[39] #  控制抵抗系数 DWORD
    def GetSuperHitRateC(self): return self.attrTuple[40] #  暴击率加成系数 DWORD
    def GetIgnoreDefRateC(self): return self.attrTuple[41] #  无视防御系数 DWORD
    def GetIgnoreDefRateReduceC(self): return self.attrTuple[42] #  无视防御减免系数 DWORD
    def GetProDefPerC(self): return self.attrTuple[43] #  防护百分比系数 DWORD
    def GetFinalHurtPerC(self): return self.attrTuple[44] #  最终伤害加成系数 DWORD
    def GetFinalHurtReducePerC(self): return self.attrTuple[45] #  最终伤害减免系数 DWORD
# 成就表
class IPY_Success():
@@ -4784,17 +4456,6 @@
    def GetLowLV(self): return self.attrTuple[2] #  推荐最低等级 WORD
    def GetHighestLV(self): return self.attrTuple[3] #  推荐最高等级 WORD
    def GetDefense(self): return self.attrTuple[4] #  推荐防御 DWORD
# 天赋技能表
class IPY_TalentSkill():
    def __init__(self):
        self.attrTuple = None
        return
    def GetSkillID(self): return self.attrTuple[0] # 技能ID DWORD
    def GetTalentType(self): return self.attrTuple[1] # 天赋类型 BYTE
    def GetSeries(self): return self.attrTuple[2] # 天赋系别 BYTE
# 限时抢购表
class IPY_ActFlashSale():
@@ -6059,7 +5720,6 @@
        self.__LoadFileData("PlayerFace", onlyCheck)
        self.__LoadFileData("PlayerFacePic", onlyCheck)
        self.__LoadFileData("ChatBox", onlyCheck)
        self.__LoadFileData("SkillMatch", onlyCheck)
        self.__LoadFileData("RolePoint", onlyCheck)
        self.__LoadFileData("LingQiAttr", onlyCheck)
        self.__LoadFileData("LingQiTrain", onlyCheck)
@@ -6110,19 +5770,12 @@
        self.__LoadFileData("PlayerLV", onlyCheck)
        self.__LoadFileData("SpecMapPlayerAttrFormat", onlyCheck)
        self.__LoadFileData("GMAttr", onlyCheck)
        self.__LoadFileData("NPCRealmStrengthen", onlyCheck)
        self.__LoadFileData("NPCTimeLostHP", onlyCheck)
        self.__LoadFileData("EquipSuitAttr", onlyCheck)
        self.__LoadFileData("WingRefineAttr", onlyCheck)
        self.__LoadFileData("WingRefineExp", onlyCheck)
        self.__LoadFileData("NPCDropItem", onlyCheck)
        self.__LoadFileData("RuneTower", onlyCheck)
        self.__LoadFileData("ChinMap", onlyCheck)
        self.__LoadFileData("FBFunc", onlyCheck)
        self.__LoadFileData("FBLine", onlyCheck)
        self.__LoadFileData("Tianzi", onlyCheck)
        self.__LoadFileData("ADAward", onlyCheck)
        self.__LoadFileData("EquipGSParam", onlyCheck)
        self.__LoadFileData("Success", onlyCheck)
        self.__LoadFileData("TongTianLV", onlyCheck)
        self.__LoadFileData("TongTianTask", onlyCheck)
@@ -6183,7 +5836,6 @@
        self.__LoadFileData("AllPeopleParty", onlyCheck)
        self.__LoadFileData("AllPeoplePartyAward", onlyCheck)
        self.__LoadFileData("MapEventPoint", onlyCheck)
        self.__LoadFileData("TalentSkill", onlyCheck)
        self.__LoadFileData("ActFlashSale", onlyCheck)
        self.__LoadFileData("ActWishingWell", onlyCheck)
        self.__LoadFileData("WishingWell", onlyCheck)
@@ -6686,13 +6338,6 @@
        self.CheckLoadData("ChatBox")
        return self.ipyChatBoxCache[index]
    def GetSkillMatchCount(self):
        self.CheckLoadData("SkillMatch")
        return self.ipySkillMatchLen
    def GetSkillMatchByIndex(self, index):
        self.CheckLoadData("SkillMatch")
        return self.ipySkillMatchCache[index]
    def GetRolePointCount(self):
        self.CheckLoadData("RolePoint")
        return self.ipyRolePointLen
@@ -7043,48 +6688,6 @@
        self.CheckLoadData("GMAttr")
        return self.ipyGMAttrCache[index]
    def GetNPCRealmStrengthenCount(self):
        self.CheckLoadData("NPCRealmStrengthen")
        return self.ipyNPCRealmStrengthenLen
    def GetNPCRealmStrengthenByIndex(self, index):
        self.CheckLoadData("NPCRealmStrengthen")
        return self.ipyNPCRealmStrengthenCache[index]
    def GetNPCTimeLostHPCount(self):
        self.CheckLoadData("NPCTimeLostHP")
        return self.ipyNPCTimeLostHPLen
    def GetNPCTimeLostHPByIndex(self, index):
        self.CheckLoadData("NPCTimeLostHP")
        return self.ipyNPCTimeLostHPCache[index]
    def GetEquipSuitAttrCount(self):
        self.CheckLoadData("EquipSuitAttr")
        return self.ipyEquipSuitAttrLen
    def GetEquipSuitAttrByIndex(self, index):
        self.CheckLoadData("EquipSuitAttr")
        return self.ipyEquipSuitAttrCache[index]
    def GetWingRefineAttrCount(self):
        self.CheckLoadData("WingRefineAttr")
        return self.ipyWingRefineAttrLen
    def GetWingRefineAttrByIndex(self, index):
        self.CheckLoadData("WingRefineAttr")
        return self.ipyWingRefineAttrCache[index]
    def GetWingRefineExpCount(self):
        self.CheckLoadData("WingRefineExp")
        return self.ipyWingRefineExpLen
    def GetWingRefineExpByIndex(self, index):
        self.CheckLoadData("WingRefineExp")
        return self.ipyWingRefineExpCache[index]
    def GetNPCDropItemCount(self):
        self.CheckLoadData("NPCDropItem")
        return self.ipyNPCDropItemLen
    def GetNPCDropItemByIndex(self, index):
        self.CheckLoadData("NPCDropItem")
        return self.ipyNPCDropItemCache[index]
    def GetRuneTowerCount(self):
        self.CheckLoadData("RuneTower")
        return self.ipyRuneTowerLen
@@ -7126,13 +6729,6 @@
    def GetADAwardByIndex(self, index):
        self.CheckLoadData("ADAward")
        return self.ipyADAwardCache[index]
    def GetEquipGSParamCount(self):
        self.CheckLoadData("EquipGSParam")
        return self.ipyEquipGSParamLen
    def GetEquipGSParamByIndex(self, index):
        self.CheckLoadData("EquipGSParam")
        return self.ipyEquipGSParamCache[index]
    def GetSuccessCount(self):
        self.CheckLoadData("Success")
@@ -7553,13 +7149,6 @@
    def GetMapEventPointByIndex(self, index):
        self.CheckLoadData("MapEventPoint")
        return self.ipyMapEventPointCache[index]
    def GetTalentSkillCount(self):
        self.CheckLoadData("TalentSkill")
        return self.ipyTalentSkillLen
    def GetTalentSkillByIndex(self, index):
        self.CheckLoadData("TalentSkill")
        return self.ipyTalentSkillCache[index]
    def GetActFlashSaleCount(self):
        self.CheckLoadData("ActFlashSale")
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -105,12 +105,6 @@
    # NPC等级
    if hasattr(curNPC, "GetCurLV"):
        return max(curNPC.GetCurLV(), curNPC.GetLV())
    if curPlayer and PlayerControl.GetRealmDifficulty(curPlayer):
        npcID = curNPC.GetNPCID()
        needRealmLV = PlayerControl.GetDifficultyRealmLV(PlayerControl.GetRealmDifficulty(curPlayer))
        realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, needRealmLV)
        if realmNPCIpyData:
            return realmNPCIpyData.GetLV()
    return curNPC.GetLV()
def GetNPCDataPy(npcID):
@@ -3199,47 +3193,7 @@
    #  @return 返回值, 获得经验
    #  @remarks 获得经验, 可能是小数
    def __GetExp(self, playerLV, isTeam=False, player=None):
        curNPC = self.__Instance
        baseExp = 0
        #玩家不在副本中
        if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
            baseExp = FBLogic.OnGetNPCExp(player, curNPC)
        if baseExp > 0:
            return baseExp
        npcID = curNPC.GetNPCID()
        realmLV = PlayerControl.GetDifficultyRealmLV(curNPC.GetSightLevel())
        realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, realmLV)
        if realmNPCIpyData:
            baseExp = realmNPCIpyData.GetExp()
            npcLV = realmNPCIpyData.GetLV()
        else:
            baseExp = curNPC.GetExp()
            npcLV = curNPC.GetLV()
        if baseExp == 0:
            #GameWorld.Log("杀怪经验异常,该NPC = %s,无经验"%(curNPC.GetID()))
            return 0
        playerID = 0 if not player else player.GetPlayerID()
        # 如果是队伍,则按伤害贡献度计算所获得经验比例
        if isTeam:
            if not player:
                return 0
            hurtPer = AttackCommon.GetTeamPlayerHurtPer(player, curNPC)
            if not hurtPer:
                return 0
            #GameWorld.DebugLog("队员击杀基础经验: npcID=%s,baseExp=%s,hurtPer=%s" % (curNPC.GetNPCID(), baseExp, hurtPer), playerID)
            baseExp *= hurtPer
        #else:
        #    GameWorld.DebugLog("个人击杀基础经验: npcID=%s,baseExp=%s" % (curNPC.GetNPCID(), baseExp), playerID)
        #经验衰减公式 = max(杀怪经验 * max(1-max(玩家等级-怪物等级-10,0)*0.02),0),1)
        exp = eval(FormulaControl.GetCompileFormula("ExpAttenuation", IpyGameDataPY.GetFuncCfg("ExpAttenuation", 1)))
        #exp = CalcNPCExp(baseExp, playerLV, npcLV)
        #GameWorld.DebugLog("击杀NPC最终基础经验: npcID=%s,npcLV=%s,playerLV=%s,baseExp=%s,exp=%s"
        #                   % (curNPC.GetNPCID(), npcLV, playerLV, baseExp, exp), playerID)
        return exp
    
    #---------------------------------------------------------------------
    
@@ -3656,11 +3610,6 @@
    npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
    if not npcData:
        return 0
    needRealmLV = PlayerControl.GetDifficultyRealmLV(PlayerControl.GetRealmDifficulty(curPlayer))
    realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, needRealmLV)
    if realmNPCIpyData:
        baseExp = realmNPCIpyData.GetExp()
    else:
        baseExp = npcData.GetExp()
    if not baseExp:
        return 0
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -416,24 +416,6 @@
    
    return True
##地图特殊限制检查, 装备检查
# @param curPlayer
# @return bool
def CheckEquipCanTrans(curPlayer, destMapID):
    if destMapID != 10060:
        return True
    #有翅膀可以上天空
    playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
    curEquip = playerEquip.GetAt(IPY_GameWorld.retWing)
    if curEquip and not curEquip.IsEmpty():
        return True
    #GeRen_lhs_861048
    NotifyCode(curPlayer, "GeRen_lhs_861048", [destMapID])
    return False
#---------------------------------------------------------------------
##通知客户端, 玩家Loading开始
# @param curPlayer 玩家实例
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
File was deleted
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -811,7 +811,6 @@
GameFuncID_Arena = 27           # 竞技场
# 以下为暂时无用的
GameFuncID_Wing = -1            # 翅膀 3
GameFuncID_Pet = -1             # 宠物,灵宠 6
GameFuncID_Horse = -1           # 坐骑 8
GameFuncID_OSSail = -1          # 开服特惠 132
@@ -1202,8 +1201,6 @@
Def_IudetBaseAttrID = 21  # 物品基础属性ID列表,适用于随机范围基础属性(非物品表配置的固定属性)
Def_IudetBaseAttrValue = 23  # 物品基础属性值列表
Def_IudetPartSuiteLV = 25  # 部位套装等级 [套装类型1等级, 套装类型2等级, ...]
Def_IudetWingMaterialItemID = 27  # 翅膀精炼材料ID列表
Def_IudetWingMaterialItemCount = 29  # 翅膀精炼材料个数列表
Def_IudetDogzEquipPlus = 31  # 神兽装备强化信息列表 [强化等级, 累计总熟练度]
Def_IudetItemDecompound = 33  # 拆解返还物品列表 [装备ID,材料1ID,个数,是否绑定,材料2ID,个数,是否绑定,...]
Def_IudetLiantaiItemID = 35  # 合成该莲台的所有莲台ID [itemID, itemID, ...]
@@ -1232,7 +1229,6 @@
Def_IudetLastOpenItemLoginDay = 36  # 上一次开启物品时的登录天数
Def_IudetRuneLV = 38  # 符印等级
Def_IudetRuneSource = 40  # 符印来源 老号0,默认1,合成2(主要用来区分是否合成获得)
Def_IudetWingProgressValue = 42 #羽翼精炼值
Def_IudetCreateTime = 44 # 时效物品的创建时间
Def_IudetGatherSoulLV = 46  # 聚魂等级
Def_IudetExpireTime = 48 # 时效物品指定有效时间,时间单位由时效类型决定
@@ -1377,7 +1373,6 @@
Def_UserAction_ExMissionLog = "DwzCw4q8cWTB_ex-mission-log" # 扩展任务记录
Def_UserAction_HorseClass = "DwzCw4q8cWTB_ex-horse-class" # 坐骑进阶记录
Def_UserAction_WingClass = "DwzCw4q8cWTB_ex-wing-class" # 翅膀进阶记录
Def_UserAction_PetLV = "DwzCw4q8cWTB_ex-pet-lv" # 宠物升级记录
Def_UserAction_PetClass = "DwzCw4q8cWTB_ex-pet-class" # 宠物进阶记录
Def_UserAction_GiveMoney = "DwzCw4q8cWTB_ex-give-money" # 货币产出记录
@@ -1385,12 +1380,10 @@
Def_UserAction_EquipItem = "DwzCw4q8cWTB_ex-equip-item" # 玩家装备统计
Def_UserAction_ItemRecord = 1404 # 物品流水记录
Def_UserAction_CoinToGold = "DwzCw4q8cWTB_ex-coin-to-gold" # 兑换点券
Def_UserAction_RuneLV = "DwzCw4q8cWTB_ex-wing-soul-lv" # 符印升级记录
Def_UserAction_ChangeName = "DwzCw4q8cWTB_ex-change-name" # 改名记录
Def_UserAction_AddZhenqi = "DwzCw4q8cWTB_ex-add-zhenqi" # 增加真气记录
Def_UserAction_LostZhenqi = "DwzCw4q8cWTB_ex-lost-zhenqi" # 扣除真气记录
Def_UserAction_CoatLV = "DwzCw4q8cWTB_ex-coat-lv" # 时装升级记录
Def_UserAction_WingSkinLV = "DwzCw4q8cWTB_ex-wingskin-lv" # 幻化翅膀升级记录
Def_UserAction_HorseSkinLV = "DwzCw4q8cWTB_ex-horseskin-lv" # 幻化坐骑升级记录
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_513.py
File was deleted