| | |
| | | list AttrPerStarAddList; //每星加成值列表
|
| | | };
|
| | |
|
| | | //技能搭配表
|
| | |
|
| | | struct tagSkillMatch
|
| | | {
|
| | | BYTE _IDIndex;
|
| | | list Skills; //主动技能(职业1id|职业2id)
|
| | | };
|
| | |
|
| | | //灵根表 #tagRolePoint
|
| | |
|
| | | struct tagRolePoint
|
| | |
| | | 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
|
| | |
| | | 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; // 最终伤害减免系数
|
| | | };
|
| | |
|
| | | //成就表
|
| | |
| | | WORD LowLV; // 推荐最低等级
|
| | | WORD HighestLV; // 推荐最高等级
|
| | | DWORD Defense; // 推荐防御
|
| | | };
|
| | |
|
| | | //天赋技能表
|
| | |
|
| | | struct tagTalentSkill
|
| | | {
|
| | | DWORD _SkillID; //技能ID
|
| | | BYTE TalentType; //天赋类型
|
| | | BYTE Series; //天赋系别
|
| | | };
|
| | |
|
| | | //限时抢购表
|
| | |
| | | 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
|
| | |
| | | #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 #最大使用造化丹次数
|
| | |
| | | ## 装备位 - 灵器
|
| | | 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 = []
|
| | |
| | | ) = range(1001, 1091)
|
| | |
|
| | |
|
| | | #不可以佩戴翅膀的地图
|
| | | CanNotWearWingMapIDList = []
|
| | | #不可以佩戴武器时装的地图
|
| | | CanNotWearWeaponCoatMapIDList = []
|
| | | #不可以使用恢复物品或技能的地图
|
| | |
| | | ItemDel_EquipDecompose, # 装备分解
|
| | | ItemDel_20, # 捐献装备 20
|
| | | ItemDel_Treasure, # 寻宝
|
| | | ItemDel_WingExp, # 翅膀精炼经验
|
| | | ItemDel_22, # 翅膀精炼经验
|
| | | ItemDel_StoneUpgrade, # 宝石升级
|
| | | ItemDel_ItemCompound, # 合成
|
| | | ItemDel_Horse, # 坐骑 25
|
| | |
| | | ItemDel_AddBourseItem:"AddBourseItem",
|
| | | ItemDel_EquipDecompose:"EquipDecompose",
|
| | | ItemDel_Treasure:"Treasure",
|
| | | ItemDel_WingExp:"WingExp",
|
| | | ItemDel_StoneUpgrade:"StoneUpgrade",
|
| | | ItemDel_ItemCompound:"ItemCompound",
|
| | | ItemDel_Horse:"Horse",
|
| | |
| | | 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 = "|"
|
| | |
| | | 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
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #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):
|
| | |
| | | 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)
|
| | | #===========================================================================
|
| | |
| | | #===========================================================================
|
| | | 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):
|
| | | # 宠物升级记录
|
| | |
| | | # 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):
|
| | | # 时装升级记录
|
| | |
| | |
|
| | | 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())
|
| | |
| | | ("list", "AttrPerStarAddList", 0),
|
| | | ),
|
| | |
|
| | | "SkillMatch":(
|
| | | ("BYTE", "IDIndex", 1),
|
| | | ("list", "Skills", 0),
|
| | | ),
|
| | |
|
| | | "RolePoint":(
|
| | | ("BYTE", "AttrID", 1),
|
| | | ("dict", "AddAttrInfoPerPoint", 0),
|
| | |
| | | ("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),
|
| | |
| | | ("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":(
|
| | |
| | | ("WORD", "LowLV", 0),
|
| | | ("WORD", "HighestLV", 0),
|
| | | ("DWORD", "Defense", 0),
|
| | | ),
|
| | |
|
| | | "TalentSkill":(
|
| | | ("DWORD", "SkillID", 1),
|
| | | ("BYTE", "TalentType", 0),
|
| | | ("BYTE", "Series", 0),
|
| | | ),
|
| | |
|
| | | "ActFlashSale":(
|
| | |
| | | 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(): |
| | | |
| | |
| | | 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(): |
| | | |
| | |
| | | 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(): |
| | |
| | | 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(): |
| | |
| | | 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)
|
| | |
| | | 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)
|
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | 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") |
| | |
| | | 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") |
| | |
| | | # 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):
|
| | |
| | | # @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
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
| | | 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
|
| | |
| | |
|
| | | 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 玩家实例
|
| | |
| | | GameFuncID_Arena = 27 # 竞技场
|
| | |
|
| | | # 以下为暂时无用的
|
| | | GameFuncID_Wing = -1 # 翅膀 3
|
| | | GameFuncID_Pet = -1 # 宠物,灵宠 6
|
| | | GameFuncID_Horse = -1 # 坐骑 8
|
| | | GameFuncID_OSSail = -1 # 开服特惠 132
|
| | |
| | | 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, ...]
|
| | |
| | | Def_IudetLastOpenItemLoginDay = 36 # 上一次开启物品时的登录天数
|
| | | Def_IudetRuneLV = 38 # 符印等级
|
| | | Def_IudetRuneSource = 40 # 符印来源 老号0,默认1,合成2(主要用来区分是否合成获得)
|
| | | Def_IudetWingProgressValue = 42 #羽翼精炼值
|
| | | Def_IudetCreateTime = 44 # 时效物品的创建时间
|
| | | Def_IudetGatherSoulLV = 46 # 聚魂等级
|
| | | Def_IudetExpireTime = 48 # 时效物品指定有效时间,时间单位由时效类型决定
|
| | |
| | |
|
| | | 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" # 货币产出记录
|
| | |
| | | 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" # 幻化坐骑升级记录
|
| | |
|
| | |
|