PySysDB/PySysDBG | 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/PySysDBG.des | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/PySysDBG.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/PySysDBPY | 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/PySysDBPY.des | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/PySysDBPY.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/生成IpyGameDataPY/IpyGameDataPYCreater.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/生成IpyGameDataPY/Ipy系统表使用说明.docx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/生成IpyGameDataPY/config.ini | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/生成IpyGameDataPY/生成IpyGameDataPY_GameServer.bat | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
PySysDB/生成IpyGameDataPY/生成IpyGameDataPY_MapServer.bat | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
PySysDB/PySysDBG
PySysDB/PySysDBG.des
New file @@ -0,0 +1 @@ pyèªå®ä¹è¡¨GameServer PySysDB/PySysDBG.h
New file @@ -0,0 +1,294 @@ //åè½é ç½®è¡¨æ ¼ #tagFuncConfig struct tagFuncConfig { char _Key; //æ è¯ char Numerical1; //æ°æ®1 char Numerical2; //æ°æ®2 char Numerical3; //æ°æ®3 char Numerical4; //æ°æ®4 char Numerical5; //æ°æ®5 }; //ä¸çççº§è¡¨æ ¼ #tagWorldLV struct tagWorldLV { WORD _WorldLV; //ä¸çç级 DWORD OpenServerSecond; //弿æ¶é´ç§ }; //ä»çè¡¨æ ¼ #tagFamily struct tagFamily { BYTE _FamilyLV; //ä»çç级 WORD MemberCnt; //æåæ°é BYTE DeputyLeaderCnt; //å¯ç主æ°é BYTE EliteCnt; //ç²¾è±æ°é DWORD NeedMoney; //å级éè¦èµé DWORD WeekMissionMoneyMax; //æ¯å¨ä»»å¡æå¤§å¯è·å¾ä»çèµé }; //é叿¥è¯¢è¡¨ struct tagMarketQuery { WORD _QueryType; //æ¥è¯¢ç±»å dict LimitInfo; //éå¶æ¡ä»¶ }; //è¿è¥æ´»å¨è¡¨ struct tagActionControl { WORD _ID; //æ´»å¨ID char Mark[20]; //æ´»å¨ç±»åæ è®° char Data[50]; //æ´»å¨æ°æ® WORD LVLimit; //éå¶ç级 char OpenDate[10]; //å¼å¯æ¥æ char CloseDate[10]; //ç»ææ¥æ char ValidOpenServerDay[10]; //ææå¼æå¤©, ä¸åæå¤©ãææäºæ¥ char ValidMixServerDay[10]; //ææåæå¤©, ä¸å¼æå¤©ãææäºæ¥ char VaildWeek[10]; //ææææ, ä¸å¼æå¤©ãåæå¤©äºæ¥ char OpenTime[5]; //å¼å¯æ¶é´ char CloseTime[5]; //ç»ææ¶é´ BYTE TimeValidType; //æ¶é´æææ§ char SpecTimeState[50]; //ç¹æ®æ´»å¨ç¶ææ¶é´æ§å¶ä¿¡æ¯ char NotifyInfo[100]; //å ¨æå¹¿æä¿¡æ¯é ç½® }; //æ¥å¸¸æ´»å¨è¡¨ struct tagDailyAction { DWORD _DailyID; //æ´»å¨ID BYTE OpenServerDay; //å¼æç¬¬å 天å¼å§å¼å¯,0为ä¸éå¶ char OpenTime; //å¼å¯æ¶é´ DWORD Duration; //æç»æ¶é´, 0为ä¸éå¶ dict NotifyInfo; //广ææç¤ºä¿¡æ¯ }; //坿¬ç¶ææ¶é´è¡¨ struct tagFBStateTime { DWORD _ID; //ID DWORD DataMapID; //æå±çç©æ³æ°æ®å°å¾ID BYTE OpenServerWeek; //弿Xå¨å弿¾ BYTE OpenServerDay; //弿X天å弿¾ BYTE StartWeekday; //å¼å§ææ BYTE StartHour; //å¼å§æ¶ BYTE StartMinute; //å¼å§å BYTE EndWeekday; //ç»æææ BYTE EndHour; //ç»ææ¶ BYTE EndMinute; //ç»æå BYTE CanEnter; //æ¯å¦å¯è¿å ¥å¯æ¬ BYTE StateValue; //״ֵ̬ dict NotifyInfoDict; //广ææç¤ºä¿¡æ¯ }; //坿¬åè½çº¿è·¯è¡¨ struct tagFBLine { DWORD _DataMapID; //æ°æ®å°å¾ID BYTE _LineID; //åè½çº¿è·¯ID DWORD MapID; //åºæ¯å°å¾ID }; //å°å¾è¡¨ struct tagChinMap { DWORD _MapID; //å°å¾ID char MapName; //å°å¾å BYTE MapFBType; // å°å¾ç±»å BYTE TeamLimit; // éä¼éå¶ç±»åï¼0ä¸éï¼1-ä¸å¯åæ´ï¼2-ä¸å¯åå¨éä¼ }; //BOSSä¿¡æ¯è¡¨ struct tagBOSSInfo { DWORD _NPCID; //ID DWORD MapID; //å°å¾ID char RefreshTime; //å·æ°æ¶é´ åæ° onlineCnt list LVLimit; //å¨çº¿äººç©ç级èå´ BYTE DiffPer; //ç¾åæ¯ä¸ä¹åç误差å°äºX%,åæ´æ°å®æ¶å¨çº¿æ°é BYTE NoUpdataCnt; //å¤å°æ¬¡æªæ´æ°å®æ¶å¨çº¿æ°éåæ®µæ¶å¼ºå¶æ´æ° DWORD StoneNPCID; //å¢ç¢NPCID WORD RebornPreNotifyTime; //夿´»åXç§éç¥ char SourceName; //BOSSæ¥æº }; //å®´ä¼é¢åºè¡¨ struct tagQuestionBank { DWORD _ID; //ID char Answer; //çæ¡ }; //ä»ç红å 表 struct tagFamilyRedPack { WORD _ID; //ID WORD GetType; //è·å¾éå¾ WORD MoneyNum; //红å é¢åº¦ BYTE MoneyType; //éé±ç±»å BYTE PacketCnt; //红å ä¸ªæ° BYTE LeaderOwn; //æ¯å¦å½å±ç主 }; //ç级å¼å¯åè½ #tagFuncOpenLV struct tagFuncOpenLV { DWORD _FuncId; //åè½æ è¯ DWORD LimitLV; //å¼å¯ç级 DWORD LimitMagicWeapon; //éè¦è§£éæ³å®ID WORD LimiRealmLV; //éè¦å¢çç级 }; //NPC表 struct tagChinNPC { DWORD _NPCID; char NPCName; WORD LV; }; //ç©å®¶ç级表 struct tagPlayerLV { WORD _LV; //ç©å®¶ç级 DWORD ReFightPower; //ææå }; //éæ¶ç¹æ 表 struct tagActSpringSale { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 BYTE OpenServerDayLimit; //弿X天忿 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ list StartTimeList; //å¼å¯æ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ list EndTimeList; //ç»ææ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD LVLimit; //éå¶ç级 BYTE IsDayReset; //æ¯å¦æ¯å¤©éç½® list ShopTypeList; //ååºç±»åå表 }; //éæ¶ç¤¼å 表 struct tagActFlashGiftbag { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 BYTE OpenServerDayLimit; //弿X天忿 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ list StartTimeList; //å¼å¯æ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ list EndTimeList; //ç»ææ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD LVLimit; //éå¶ç级 BYTE IsDayReset; //æ¯å¦æ¯å¤©éç½® list GiftbagTypeList; //礼å ç±»åå表 }; //ååç»éªæ´»å¨è¡¨ struct tagActExpRate { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ list StartTimeList; //å¼å¯æ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ list EndTimeList; //ç»ææ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD LVLimit; //éå¶ç级 DWORD AddExpRate; //ç»éªåçå æï¼ä¸åç }; //æ¶è´¹è¿å©æ´»å¨è¡¨ struct tagActCostRebate { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD LVLimit; //éå¶ç级 BYTE IsDayReset; //æ¯å¦æ¯å¤©éç½® list TemplateIDList; //模æ¿IDå表 }; //BOSS夿´»æ´»å¨æ¶é´è¡¨ struct tagActBossReborn { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD LVLimit; //éå¶ç级 }; //ä»ççå ¸æ´»å¨æ¶é´è¡¨ struct tagActFairyCeremony { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD LVLimit; //éå¶ç级 }; //ä»ççå ¸-ç»çé临表 struct tagUniquenessArrive { BYTE _WorldLvNum; //ä¸çç级档 DWORD _Rank; //æå dict Award; //å¥å± {"èä¸":[[ç©åID,个æ°,æ¯å¦ç»å®],...], ...} }; //å¤åä¿®è¡ç¹æ´»å¨æ¶é´è¡¨ struct tagActRealmPoint { DWORD _CfgID; //é ç½®ID char ActMark; //æ´»å¨ç»æ è®° list ServerIDList; //æå¡å¨IDå表 char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ dict NotifyInfoStart; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹å¼å§æ¶é´ dict NotifyInfoEnd; //å ¨ææç¤ºä¿¡æ¯ - ç¸å¯¹ç»ææ¶é´ WORD Multiple; //åæ° WORD LVLimit; //éå¶ç级 }; PySysDB/PySysDBPY
PySysDB/PySysDBPY.des
New file @@ -0,0 +1 @@ pyèªå®ä¹è¡¨MapServer PySysDB/PySysDBPY.h
New file @@ -0,0 +1,1177 @@ //ç§°å·è¡¨ #tagDienstgrad struct tagDienstgrad { DWORD _ID; //头è¡id WORD Type; //头è¡ç±»å DWORD ExpireTime; //æææ¶é´ list LightType; //ç¹äº®å±æ§ç±»å list LightAttribute; //ç¹äº®å±æ§å¼ list Skills; //è¢«å¨æè½ }; //å¢ç表 #tagRealm struct tagRealm { WORD _Lv; //å¢çç级 BYTE IsBigRealm; //æ¯å¦å¤§å¢ç DWORD NeedPoint; //å¼å¯æ¸¡å«éè¦ä¿®ç¼ç¹ DWORD NeedItemID; //å¼å¯æ¸¡å«éè¦éå ·ID WORD NeedItemCnt; //å¼å¯æ¸¡å«æ¶èçéå ·æ°é dict NeedActiveTreasure; //å¼å¯æ¸¡å«éè¦æ¿æ´»æ³å®æ¡ä»¶ list AddAttrType; //å¢çå æå±æ§ç±»å list AddAttrNum; //å¢çå æå±æ§å¼ DWORD BossID; //渡å«bossid dict SitTime; //æåæ¶é´ dict TeamAward; //ç»é帮æç人çå¥å± }; //ç¥å µè¡¨ #tagGodWeapon struct tagGodWeapon { WORD _Type; //ç¥å µç±»å WORD _LV; //ç级 DWORD Exp; list AttrType; //屿§ç±»å list AttrNum; //屿§å¼ DWORD SkillID; //æ¿æ´»æè½ID }; //åè½é ç½®è¡¨æ ¼ #tagFuncConfig struct tagFuncConfig { char _Key; //æ è¯ char Numerical1; //æ°æ®1 char Numerical2; //æ°æ®2 char Numerical3; //æ°æ®3 char Numerical4; //æ°æ®4 char Numerical5; //æ°æ®5 }; //ç级å¼å¯åè½ #tagFuncOpenLV struct tagFuncOpenLV { DWORD _FuncId; //åè½æ è¯ DWORD LimitLV; //å¼å¯ç级 DWORD LimitMagicWeapon; //éè¦è§£éæ³å®ID WORD LimiRealmLV; //éè¦å¢çç级 DWORD LimitMissionID; //éè¦å®æçä»»å¡ID }; //åæè¡¨ #tagItemCompound struct tagItemCompound { WORD _ID; //åæé ç½®ç¼å·ID list MakeID; //å¯åæçéå ·IDï¼å¤ä¸ªåéæºä¸ä¸ª list UnfixedItemID; //ä¸åºå®éå ·ID, å¤ä¸ªIDæ¶åä»»æä¸ç§åå¯ BYTE UnfixedItemCount; //ä¸åºå®éå ·æ¶èæ°é list FixedItemID; //æ¶èåºå®éå ·ID, å¤ä¸ªIDæ¶ä»£è¡¨æ¯ä¸ªIDåéæ¶è list FixedItemCount; //æ¶èåºå®éå ·æ°éï¼æ¯ä¸ªIDå¯¹åºæ°é DWORD NeedMoney; // æ¶èéé± WORD SuccessRate; // æåçä¸åç WORD SuccessRateMax; // æå¤§æåçä¸åç BYTE AddonsCountMax; //æå¤§å¯éå æææ°, å¢å æ¦çç¨, éå¿ é¡», 0代表ä¸å¯éå ææ char SysMark; //æç¤ºmark }; //ç©åå¼ºåææè¡¨ struct tagItemPlus { BYTE _Type; //强åç±»å WORD _LV; //强åç级 list AttrType; //屿§ç±»å list AttrValue; //屿§å¼ DWORD CostCount; //æ¶èéé± DWORD AddExp; //æåçç»åº¦å¼ DWORD TotalExp; //å级æéçç»åº¦æ»å¼ }; //è£ å¤å¼ºåç级ä¸é struct tagItemPlusMax { BYTE _Type; //æè£ å¤ä½å¯¹åºç±»åæ¥æ¾ BYTE _ItemRank; // è£ å¤é¶æ° BYTE _ItemColor; //è£ å¤é¢è² 妿©è£ WORD LevelMax; //强åç级ä¸é }; //è£ å¤å ¨èº«å¼ºå屿§ struct tagItemPlusSumAttr { WORD _PlusCntNeed; //å ¨èº«å¼ºåç级 list AttrType; //å ¨èº«å¼ºåæ¿æ´»å±æ§ç±»å list AttrValue; //å ¨èº«å¼ºåæ¿æ´»å±æ§å¼ }; //è£ å¤å ¨èº«ææ°å±æ§ struct tagRoleEquipStars { BYTE _StarsNeed; //å ¨èº«ææ° list AttrType; //屿§ç±»å list AttrValue; //屿§å¼ }; //符å°è¡¨ struct tagRune { DWORD _ID; //ç¼å·ID list AttrType; //å ¨èº«å¼ºåæ¿æ´»å±æ§ç±»å }; //æ´ç»è¡¨ #tagEquipWash struct tagEquipWash { BYTE _WashType; // è£ å¤å½ç»ç±»å BYTE _WashLV; // æ´ç»ç级 BYTE AttrType1; // 屿§1ç±»å DWORD AttrMax1; // 屿§1å½åç级æ´ç»ä¸é dict AttrRandDict1; // 屿§1éæºèå´ DWORD AttrCostGoldMin1; // 屿§1ä»çæ´ç»ä¸éå¼ DWORD AttrCostGoldMax1; // 屿§1ä»çæ´ç»ä¸éå¼ BYTE AttrType2; // 屿§2ç±»å DWORD AttrMax2; // 屿§2å½åç级æ´ç»ä¸é dict AttrRandDict2; // 屿§2éæºèå´ DWORD AttrCostGoldMin2; // 屿§2ä»çæ´ç»ä¸éå¼ DWORD AttrCostGoldMax2; // 屿§2ä»çæ´ç»ä¸éå¼ BYTE AttrType3; // 屿§3ç±»å DWORD AttrMax3; // 屿§3å½åç级æ´ç»ä¸é dict AttrRandDict3; // 屿§3éæºèå´ DWORD AttrCostGoldMin3; // 屿§3ä»çæ´ç»ä¸éå¼ DWORD AttrCostGoldMax3; // 屿§3ä»çæ´ç»ä¸éå¼ DWORD CostItemID; // åºå®æ¶èç©åID BYTE CostItemCount; // åºå®æ¶èç©åä¸ªæ° list GoldWashCostList; // ä»çæ´ç»æ¡æ°å¯¹åºæ¶è }; //æ´ç»ç¹æ®å±æ§è¡¨ #tagEquipWashSpec struct tagEquipWashSpec { BYTE _WashTypeNeed; // æéè£ å¤å½ç»ç±»å BYTE _WashLVNeed; // æéæ´ç»ç级 list AddAttrType; //æ¿æ´»å æå±æ§ç±»å list AddAttrValue; //æ¿æ´»å æå±æ§å¼ }; //屿§æå®è¡¨ struct tagAttrFruit { DWORD _ID; //ç©åID BYTE FuncID; //æå±åè½ID WORD MaxUseCnt; //æå¤§å¯ä½¿ç¨æ°é WORD RecycleMoney; //åæ¶è´§å¸å¼ }; //çµå ½è¡¨ struct tagPetInfo { DWORD _ID; //çµå ½NPCID BYTE Quality; //åè´¨ DWORD UnLockNeedItemID; //è§£éçµå ½ç©åID BYTE UnLockNeedItemCnt; //è§£éæéç©åæ°é DWORD DecomposeExp; //åè§£å个解éç©åå¯è·å¾åé¶ç»éª BYTE InitRank; //çµå ½åå§é¶æ° WORD MaxRank; //çµå ½æé«é¶æ° WORD UseNeedRank; //å¤å°é¶å¯åæ¢å¤è§ list SkillID; //çµå ½æè½ID list SkillUnLock; //çµå ½æè½è§£ééè¦é¶æ° DWORD InitFightPower; //åå§æå }; //è£ å¤åè§£å±æ§è¡¨ struct tagEquipDecompose { WORD _LV; //ç级 DWORD UpNeedExp; //å级æéç»éªæ° dict Attr; //屿§å æ }; //çµå ½åé¶æ¶è表 struct tagPetClassCost { DWORD _PetID; //çµå ½NPCID DWORD _Class; //çµå ½é¶æ° DWORD UpNeedExp; //çµå ½åé¶æéç»éªæ° DWORD AtkAdd; //æ¯é¶æ»å»åå æ }; //çµå ½å¸æ¶è£ å¤è¡¨ struct tagPetEatEquip { BYTE _EquipColor; //è£ å¤åè´¨ BYTE _EquipClass; //è£ å¤é¶æ° DWORD Exp; //è·å¾çµå ½å级ç»éª DWORD FamilyStoreItemScore; //ä»çå®åºç§¯å }; //åéªè¡¨ struct tagHorse { DWORD _HorseID; //åéªç¼å·ID DWORD ItemID; //åéªç©åID DWORD UnlockItemID; //è§£éåéªç©åç¼å· BYTE UnlockItemCnt; //è§£éæéç©åæ°é BYTE InitLV; //åéªåå§ç级 BYTE MaxLV; //åéªæé«ç级 BYTE UseNeedRank; //å¤å°é¶å¯åæ¢å¤è§ BYTE Quality; //åéªåè´¨ DWORD InitFightPower; //åå§æå }; //åéªå级表 struct tagHorseUp { DWORD _HorseID; //åéªç¼å·ID BYTE _LV; //åéªç级 DWORD NeedExp; //å级æéç»éª list AttrType; //æ¿æ´»å æå±æ§ç±»å list AttrValue; //æ¿æ´»å æå±æ§å¼ list SkillID; //å¯è·å¾çæè½ID }; //ç©å®¶ç级表 struct tagPlayerLV { WORD _LV; //ç©å®¶ç级 DWORD ExpPoint; //å级æéç»éªç¹,æ¯ä¸ªç»éªç¹ä»£è¡¨çç»éªç±é¡¹ç®å³å® DWORD Exp; //é¤ç»éªç¹æ»ç»éªå¤å级è¿éçç»éª BYTE TalentPoint; //ç级è·å¾ç天èµç¹ DWORD ReExp; //ç级ç»éªæç(second) DWORD ReMaxHP; //çå½ DWORD ReAtk; //æ»å» DWORD ReDef; //é²å¾¡ DWORD ReHit; //å½ä¸ DWORD ReMiss; //éªé¿ DWORD ReAtkSpeed; //æ»é DWORD ReSkillAtkRate; //æè½ä¼¤å®³æ¯ä¾ DWORD ReDamagePer; //å¢å 伤害 DWORD ReDamReduce; //åå°ä¼¤å®³ DWORD ReIgnoreDefRate; //æ è§é²å¾¡æ¯ä¾ DWORD ReLuckyHitRate; //ä¼å¿ä¸å»ç DWORD ReLuckyHit; //ä¼å¿ä¸å»ä¼¤å®³ DWORD ReBleedDamage; //æµè¡ä¼¤å®³å¢å DWORD ReIceAtk; //çå®ä¼¤å®³ DWORD ReIceDef; //ç宿µå¾¡ DWORD RePetAtk; //çµå® æ»å» DWORD RePetSkillAtkRate; //çµå® æè½ DWORD RePetDamPer; //çµå® 伤害å¢å DWORD ReFinalHurt; //åºå®ä¼¤å®³å¢å DWORD ReFinalHurtReduce; //åºå®ä¼¤å®³åå° DWORD RePotionReply; //è¡ç¶æ¢å¤é DWORD RePotionCD; //ѪƿCD DWORD AttackEff; //ææºæç DWORD ReFightPower; //ææå }; //GMæµè¯å±æ§è¡¨ struct tagGMAttr { DWORD _GMAttrID; //æ°æ®ID BYTE IsValid; //æ¯å¦ææç char GMAccID; //GMç©å®¶è´¦å· WORD GMMaxLV; //ææçæå¤§ç级 WORD AttrLV; //对åºç级表ä¸ç屿§ float AttrPer; //对åºç级表ä¸çæ¯ä¾ dict AttrSpecDict; //ç¹æ®å±æ§å¼åå ¸ {attrKey:value, ...} dict AttrExDict; //ç¹æ®å±æ§å¼åå ¸ {attrKey:value, ...} }; //æé¿åæªç©åæ°å ¬å¼è¡¨ struct tagNPCStrengthen { DWORD _NPCID; //NPCID BYTE IsStrengthenByPlayerCount;//æ¯å¦æ ¹æ®äººæ°æé¿ BYTE LVStrengthenType;//ç级æé¿ç±»å, 0-䏿ç级æé¿ï¼1-æç©å®¶å¹³åç级ï¼2-æç©å®¶æå¤§ç级ï¼3-æä¸çççº§ï¼ DWORD HitTime;//å廿¬¡æ° DWORD DefCoefficient;//人ç©é²å¾¡ç³»æ° DWORD AtkCoefficient;//äººç©æ»å»ç³»æ° DWORD AdjustCoefficient;//è°æ´ç³»æ°æ¯ä¾ DWORD AtkInterval;//æªç©æ»å»é´é DWORD HitRate;//对人ç©çå½ä¸ç DWORD MissRate;//对人ç©çéªé¿ç DWORD MonterNum;//æªç©æ° DWORD IceAtkCoefficient;//å ç´ æ»å»æ¯ä¾ DWORD IceDefCoefficient;//å ç´ ææ§æ¯ä¾ DWORD MaxEnduranceTime;//ç©å®¶æå¤§æ¿å伤害æ¶é´ DWORD FightPowerCoefficient;//åå¶ææåç³»æ° }; //è£ å¤å¥è£ 屿§è¡¨ struct tagEquipSuitAttr { BYTE _GroupType; //å¥è£ ç»åç±»å BYTE _SuiteType; //å¥è£ ç±»å WORD _SuiteLV; //å¥è£ ç级 BYTE _Job; //Ö°Òµ BYTE Count1; //é¶æ®µ1æéæ°é list AttrType1; //é¶æ®µ1屿§ç±»å list AttrValue1; //é¶æ®µ1屿§å¼ BYTE Count2; //é¶æ®µ2æéæ°é list AttrType2; //é¶æ®µ2屿§ç±»å list AttrValue2; //é¶æ®µ2屿§å¼ BYTE Count3; //é¶æ®µ2æéæ°é list AttrType3; //é¶æ®µ2屿§ç±»å list AttrValue3; //é¶æ®µ2屿§å¼ }; //å¥è£ åæè¡¨ struct tagEquipSuitCompound { BYTE _SuiteType; //å¥è£ ç±»å BYTE _EquipPlace; //è£ å¤é¨ä½ WORD _SuiteLV; //å¥è£ ç级 BYTE _Job; //Ö°Òµ list CostItemID; //ææID list CostItemCnt; //æææ°é }; //羽翼精ç¼å±æ§è¡¨ struct tagWingRefineAttr { BYTE _WingClassLV; //ç¿ èé¶çº§ dict AttrInfo; //ç²¾ç¼å±æ§ä¿¡æ¯ dict ItemColorInfo; //ç²¾ç¼ç»éªå¯¹åºé¢è²ä¿¡æ¯ DWORD MaxRefineExp; //æ¬é¶æå¤§ç²¾ç¼å¼ }; //羽翼精ç¼ç»éªè¡¨ struct tagWingRefineExp { DWORD _ItemID; //ç²¾ç¼ç©åID DWORD RandExpMin; //æå°éæºç²¾ç¼å¼ DWORD RandExpMax; //æå¤§éæºç²¾ç¼å¼ dict ExpMaterial; //ç¿ è代æ°å¯¹åºç²¾ç¼å¼ }; //ä»çç§æè¡¨ struct tagFamilyTech { DWORD _TechID; //ç§æID*1000+ç级 BYTE AttrType; //屿§ç±»å DWORD AttrValue; //屿§å¼ DWORD Contribution; //éè¦è´¡ç®åº¦ DWORD PowerEx; //é¢å¤æå }; //ææååæ°ç级系æ°è¡¨ struct tagFightPowerParam { WORD _LV; //ç级 DWORD CftHit; //å½ä¸ç³»æ° DWORD CftMiss; //éªé¿ç³»æ° DWORD CftDamagePer; //å¢å ä¼¤å®³ç³»æ° DWORD CftDamReduce; //åå°ä¼¤å®³ç³»æ° DWORD CftIgnoreDefRate; //æ è§é²å¾¡ç³»æ° DWORD CftDamChanceDef; //æµå¾¡ç³»æ° DWORD CftBleedDamage; //æµè¡ä¼¤å®³ç³»æ° DWORD CftFaintRate; //å»æç³»æ° DWORD CftSuperHitReduce; //æ´å»ææ§ç³»æ° DWORD CftLuckyHitRateReduce; //ä¼å¿ä¸å»ææ§ç³»æ° DWORD CftSkillAtkRate; //æè½ä¼¤å®³ç³»æ° DWORD CftSkillAtkRateReduce; //æè½åä¼¤ç³»æ° DWORD CftDamagePerPVP; //PVP伤害å¢èç³»æ° DWORD CftDamagePerPVPReduce; //PVP伤害åå°ç³»æ° DWORD CftDamBackPer; //伤害åå°ç³»æ° DWORD CftIgnoreDefRateReduce; //æ è§é²å¾¡ææ§ç³»æ° DWORD CftFaintDefRate; //æ§å¶æµæç³»æ° DWORD CftAtkSpeed; //æ»éç³»æ° DWORD CftLuckyHit; //ä¼å¿ä¸å»ç³»æ° }; //NPCæè½è¡¨ struct tagNPCDropItem { DWORD _NPCID; //NPCID WORD MaxWorldLV; //æå¤§ä¸çç级ï¼0为ä¸éå¶ï¼ä¸åæå¤§æè½ç级影å WORD MaxDropLV; //æå¤§å¯æè½çç©å®¶ç级, ä¸å½±åä¸çç级 BYTE CanDropRatePlus; //é¢å¤æåæççæ¯å¦ææ BYTE IsDropJobSelf; //æ¯å¦åªæè½æ¬èä¸ list PieRateDrop; //饼徿¦çæè½ä¿¡æ¯ [(æ¦ç,0),(æ¦ç,(é¶,é¢è²,é¨ä½éåkey)),...] BYTE PieRateDoCnt; //饼徿¦çæ§è¡æ¬¡æ° dict IndepRateDrop; //ç¬ç«æ¦çæè½ä¿¡æ¯ {(é¶,é¢è²,é¨ä½éåkey):æ¦ç,...} BYTE IndepRateDoCnt; //ç¬ç«æ¦çæ§è¡æ¬¡æ° dict IndepRateMaxDropCount; //ç¬ç«æ¦çè£ å¤é¢è²æå¤§æè½ç©åæ° {é¢è²:ä¸éæ°é,...} dict EquipStarInfo; //è£ å¤é¢è²å¯¹åºæçº§äº§åºè§å {é¢è²:[(æ¦ç, æçº§),...], ...} list KillCountDropEquipEx; //第xæ¬¡å»æéå å¿ æè£ å¤ [次æ°,é¶,é¢è²,[(æ¦ç,æçº§),...],é¨ä½éåkey] list KillCountDropEquipEx2; //åxæ¬¡å»æéå å¿ æè£ å¤ [次æ°,é¶,é¢è²,[(æ¦ç,æçº§),...],é¨ä½éåkey] dict ItemIDDropRate; //æå®ç©åIDæçä¿¡æ¯ {ç©åID:æ¦ç, ...} dict ItemIDMaxDropCount; //æå®ç©åIDæå¤§æè½ä¸ªæ°,没é é»è®¤1次 {ç©åID:éæºæ¬¡æ°,...} dict ItemKeyDropRate; //ç©åIDéåKeyæ¦ç, éæºä¸ä¸ª, ä¼å çº§ä½ {ç©åIDéåkey:æ¦ç, ...} dict ItemKeyDropRateJob; //ç©åIDéåKeyæ¦ç, èªèº«èä¸, ä¼å çº§é« {ç©åIDéåkey:æ¦ç, ...} dict ItemKeyMaxDropCount; //ç©åIDéåKeyéæºæ¬¡æ°,没é é»è®¤1次 {ç©åIDéåkey:éæºæ¬¡æ°,...} BYTE DropMoneyDoCnt; //æè½é叿§è¡æ¬¡æ° WORD DropMoneyRate; //æè½é叿¦ç WORD DropMoneyMin; //æè½é叿å°å¼ WORD DropMoneyMax; //æè½éå¸æå¤§å¼ list KillCountDrop; //å»ææ¬¡æ°å¿ æ,鲿¢çæ¬åæ´é夿,åªæ¯æä¸æ¬¡æºä¼ [å»ææ¬¡æ°,æ¯å¦ç´æ¥æ¾å ¥èå ,[ç©åID,...]] list PriItemIDDrop; //ææå½å±è ç§ææè½ç©åIDå表,æ¯äººä¸ä»½,é»è®¤ç»å®,没æèä¸åºå[ç©åID, ...] }; //符å°å¡è¡¨ struct tagRuneTower { DWORD _ID; //å¡ç¼å· DWORD RunePoint; //è¿å ³ç»ç¬¦å°ç²¾å DWORD Ysog; //è¿å ³ç»éç²¾ DWORD NPCID; //npcid BYTE IsNotify; //æ¯å¦å¹¿æ list FixEndAward; //åºå®ç»ç®å¥å± dict GoodDrop; //çç¨ç¬¦å°éå ³æè½æ¦ç DWORD SweepRunePoint; //æ«è¡ç¬¦å°ç²¾å DWORD SweepYsog; //æ«è¡éç²¾ dict SweepGoodDrop; //æ«è¡çç¨ç¬¦å° }; //坿¬æ»è¡¨ struct tagFBFunc { DWORD _DataMapID; //æ°æ®å°å¾ID BYTE DayTimes; //æ¯æ¥å¯æææ¬¡æ°, 0为ä¸éå¶ BYTE DayResetType; //æ¯æ¥æ¬¡æ°é置类å; 0-ä¸éç½®,1-0ç¹,2-5ç¹ BYTE WeekTimes; //æ¯å¨å¯æææ¬¡æ°, 0为ä¸éå¶ BYTE WeekResetType; //æ¯å¨æ¬¡æ°é置类å; 0-ä¸éç½®,1-0ç¹,2-5ç¹ list RewardRate; //è¯çº§å¥å±æ¯ä¾ DWORD BuyTimesVIPPriID; //è´ä¹°æ¬¡æ°VIPæéID DWORD ExtraTimesVIPPriID; //é¢å¤æ¬¡æ°VIPæéID DWORD ExtraTimesMWPriID; //é¢å¤æ¬¡æ°æ³å®æéID BYTE GuardPick; //该å°å¾å®æ¤æ¯å¦è½æ¾å WORD OfflineTime; //离线å¤ä¹ éåºå¯æ¬(ç§) WORD HelpPoint; //å©æç§¯å(0代表ä¸å¯å©æ) }; //坿¬åè½çº¿è·¯è¡¨ struct tagFBLine { DWORD _DataMapID; //æ°æ®å°å¾ID BYTE _LineID; //åè½çº¿è·¯ID DWORD MapID; //åºæ¯å°å¾ID WORD LVLimitMin; //æä½ç级éå¶, 0为ä¸éå¶ WORD LVLimitMax; //æé«ç级éå¶, 0为ä¸éå¶ BYTE JobRankLimit; //æéèä¸é¶ DWORD TicketID; //é¨ç¥¨ID list TicketCostCnt; //é¨ç¥¨æ¶èæ°ä¿¡æ¯ WORD TicketPrice; //é¨ç¥¨åä»·(ä¸è½ç¨é±æµçé 0) WORD SweepLVLimit; //æ«è¡ç级éå¶, 0为ä¸éå¶ DWORD SweepItemID; //æ«è¡æééå ·ID BYTE SweepCostCnt; //æ«è¡æééå ·ä¸ªæ° eval EnterPosInfo; //è¿å ¥åæ ä¿¡æ¯ eval StepTime; //é¶æ®µæ¶é´ eval RefreshNPC; //æ è¯ç¹å·æªé ç½® eval GradeInfo; //è¯çº§è§å eval RewardInfo; //å¥å±ä¿¡æ¯ }; //坿¬å·æªæ è¯ç¹è¡¨ struct tagNPCCustomRefresh { DWORD _ID; //å·æªè§åID list RefreshMarkInfo; //æ è¯ç¹, å½é ç½®å¤ä¸ªæ¶ä¸ºéæºæ è¯ç¹, ä¸éå¤ DWORD RefreshNPCID; //æå®NPCID list RandNPCIDList; //忬¡éæºå·æªNPCID list NPCIDCountList; //忬¡æå®å·æªNPC WORD MaxCount; //åä¸ªç¹æå¤§å卿ªç©æ° WORD TotalMaxCount; //ç¸åæ è¯ç¹æ»å·æªç©æ° BYTE IsLineOneOnly; //æ¯å¦ä» å¨1çº¿å·æª DWORD RefreshTick; //å·æªé´éç§ BYTE IsRepeat; //æ¯å¦å¾ªç¯å·æª }; //æ¥å¸¸æ´»å¨è¡¨ struct tagDailyAction { DWORD _DailyID; //æ´»å¨ID DWORD DayTimes; //æ¯æ¥æ¬¡æ°, 0为ä¸éå¶ BYTE DayResetType; //æ¯æ¥æ¬¡æ°é置类å; 0-ä¸éç½®,1-0ç¹,2-5ç¹ DWORD WeekTimes; //æ¯å¨æ¬¡æ°, 0为ä¸éå¶ BYTE WeekResetType; //æ¯å¨æ¬¡æ°é置类å; 0-ä¸éç½®,1-0ç¹,2-5ç¹ }; //è£ å¤è¯å屿§ç³»æ°è¡¨ struct tagEquipGSParam { BYTE _ClassLV; // è£ å¤é¶çº§ BYTE _EquipColor; // è£ å¤é¢è² BYTE _EquipQualityLV; // è£ å¤æçº§ DWORD AtkPerC; // æ»å»ç¾åæ¯ç³»æ° DWORD DamagePerC; // å¢å ä¼¤å®³ç³»æ° DWORD SuperHitRateC; // æ´å»çç³»æ° DWORD SuperHitPerC; // æ´å»å¼ç¾åæ¯ç³»æ° DWORD DamReducePerC; // åå°ä¼¤å®³ç³»æ° DWORD MaxHPPerC; // çå½ä¸éç¾åæ¯ç³»æ° DWORD DefPerC; // é²å¾¡åç¾åæ¯ç³»æ° DWORD LuckyHitRateC; // ä¼å¿ä¸å»çç³»æ° DWORD PetDamPerC; // çµå® 伤害å¢å ç¾åæ¯ç³»æ° DWORD PerLVAtkC; // æ¯çº§å¢å æ»å»åç³»æ° DWORD MissRateC; // éªé¿å¼ç¾åæ¯ç³»æ° DWORD HitRateC; // å½ä¸åç¾åæ¯ç³»æ° DWORD DamBackPerC; // 伤害åå°ç¾åæ¯ç³»æ° DWORD PerLVMaxHPC; // æ¯çº§å¢å çå½å¼ç³»æ° DWORD DropEquipPerC; // å¢å è£ å¤æè½å çç³»æ° DWORD DropMoneyPerC; // å¢å æè½éå¸éç¾åæ¯ç³»æ° DWORD IgnoreDefRateReduceC; // æ è§é²å¾¡ææ§ç¾åæ¯ç³»æ° DWORD DamChanceDefC; // æµå¾¡ç¾åæ¯ç³»æ° DWORD SuperHitReduceC; // æ´å»ææ§ç¾åæ¯ç³»æ° DWORD SkillAtkRateC; // æè½ä¼¤å®³ç¾åæ¯ç³»æ° DWORD SpeedPerC; // ç§»å¨é度ç¾åæ¯ç³»æ° DWORD AtkSpeedC; // æ»å»éåº¦ç³»æ° }; //æå°±è¡¨ struct tagSuccess { DWORD _ID; //æå°±ID WORD Type; //æå°±ç±»å DWORD NeedCnt; //éè¦æ°é list Condition; //è¾ å©æ¡ä»¶ list PreSuccess; //éè¦è¾¾æåç½®æå°± dict AwardItem; //å¥å±ç©åå表 dict Money; //éé± DWORD Exp; //ç»éª dict AwardAttr; //å¥å±å±æ§ DWORD RedPacketID; //红å ID DWORD MagicWeaponID; //æ³å®ID DWORD MagicWeaponExp; //æ³å®å级ç»éª }; //æ³å®è¡¨ struct tagTreasure { DWORD _ID; //ID BYTE TreasureType; //æ³å®ç±»å DWORD PreTreasure; //åç½®æ³å® list SuccID; //æå°±ID list Potentials; //æè½æ½åå级 dict NeedItem; //éè¦æ¶èç©å }; //æ³å®å级表 struct tagTreasureUp { DWORD _MWID; //æ³å®ID BYTE _LV; //æ³å®ç级 DWORD NeedExp; //éè¦ç»éª dict AddAttr; //屿§ list UnLockSkill; //è§£éçæè½ DWORD PrivilegeID; //ç¹æID }; //æ³å®ç¹æè¡¨ struct tagTreasurePrivilege { DWORD _PrivilegeID; //ç¹æID eval EffectValue; //ç¹æ®ææ DWORD SingleValue; //è¿åº¦ DWORD MaxValue; //æå¤§è¿åº¦ dict AddAttr; //屿§ list ItemAward; //ç©åå¥å± }; //æ³å®æè½å级表 struct tagTreasureSkill { BYTE _SkillUpType; //æè½å级类å BYTE _SkillLV; //æè½ç级 DWORD NeedPoint; //åå°å½å级æ¶è天ç³ç²¾å WORD InitRate; //åå§æ¦ç list NeedItemID; //åå°å½å级溶彩ç³ID list NeedItemCnt; //åå°å½åçº§æº¶å½©ç³æ°é list MaxRate; //åå°å½å级æ¦ç }; //è¿ç»ç¾å°å¥å±è¡¨ struct tagContineSignAward { BYTE _ContineDay; //è¿ç»ç¾å°å¤©æ° list ItemID; //å¥å±ç©åID BYTE IsBind; //ç©åæ¯å¦ç»å® list ItemNum; //ç©åå¥å±æå°å¼ list JobItemList; //èä¸ç©åå表 }; //ç¾å°å¥å±è¡¨ struct tagSignAward { BYTE _RewardID; //å¥å±ID list ItemID; //å¥å±ç©åID BYTE IsBind; //ç©åæ¯å¦ç»å® BYTE VipLv; //vipç级 list OrdinaryNum; //å¥å±ç©åæ°é BYTE VipMultiple; //å¥å±åç }; //VIP礼å 表 struct tagVIPAward { BYTE _VIPLV; //VIPç级 dict ItemID; //å¥å±ç©åä¿¡æ¯ WORD Price; //礼å ç°ä»· WORD OldPrice; //礼å åä»· }; //å®å¶ç©å表 struct tagAppointItem { DWORD _ID; //å®å¶ç©åID BYTE SuiteLV; //å¥è£ ç级 BYTE CancelUseLimit; //ç©¿æ´éå¶(é¤èä¸) list LegendAttrID; //ä¼ å¥å±æ§ID list LegendAttrValue; //ä¼ å¥å±æ§å¼ list OutOfPrintAttr; //ç»ç屿§ID list OutOfPrintAttrValue; //ç»ç屿§æå¤§å¼ }; //VIPç¹æè¡¨ struct tagVipPrivilege { DWORD _VIPPriID; //ç¹æID DWORD VIP0; //VIP0对åºçç¹æå¼ DWORD VIP1; //VIP1对åºçç¹æå¼ DWORD VIP2; //VIP2对åºçç¹æå¼ DWORD VIP3; //VIP3对åºçç¹æå¼ DWORD VIP4; //VIP4对åºçç¹æå¼ DWORD VIP5; //VIP5对åºçç¹æå¼ DWORD VIP6; //VIP6对åºçç¹æå¼ DWORD VIP7; //VIP7对åºçç¹æå¼ DWORD VIP8; //VIP8对åºçç¹æå¼ DWORD VIP9; //VIP9对åºçç¹æå¼ DWORD VIP10; //VIP10对åºçç¹æå¼ DWORD VIP11; //VIP11对åºçç¹æå¼ DWORD VIP12; //VIP12对åºçç¹æå¼ DWORD VIP13; //VIP13对åºçç¹æå¼ DWORD VIP14; //VIP14对åºçç¹æå¼ DWORD VIP15; //VIP15对åºçç¹æå¼ }; //åå表 struct tagStore { DWORD _ID; //ID DWORD ShopType; //ååºç±»å BYTE OperationActionShop; //æ¯å¦è¿è¥æ´»å¨ååº DWORD ItemID; //ç©åID WORD ItemCnt; //ç©åæ°é BYTE IsBind; //æ¯å¦ç»å® list ItemListEx; //æ©å±ç©åå表[[ç©åID,个æ°,æ¯å¦ç»å®],...] DWORD MainItemID; //æ çç©åID list JobItem; //è䏿¿æ¢ç©å BYTE RefreshType; //å·æ°ç±»å 0-ä¸éç½®,1-onWeek0ç¹,2-onWeek5ç¹,3-OnDay0ç¹,4-OnDay5ç¹ list LimitVIPLV; //VIPéå¶ DWORD LimitLV; //ç级éå¶ list LimitCnt; //éå¶æ°é BYTE MoneyType; //éé±ç±»å DWORD MoneyNum; //é鱿°é DWORD MoneyOriginal; //åä»· DWORD LimitValue; //éå¶æ¡ä»¶ char NotifyMark; //广ææç¤º }; //éæ¶ç¹æ 表 struct tagActSpringSale { DWORD _CfgID; //é ç½®ID char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ list StartTimeList; //å¼å¯æ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ list EndTimeList; //ç»ææ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ WORD LVLimit; //éå¶ç级 BYTE IsDayReset; //æ¯å¦æ¯å¤©éç½® list ShopTypeList; //ååºç±»åå表 }; //æ¥å¸¸ä»»å¡è¡¨ struct tagDailyQuest { DWORD _ID; //ID BYTE RelatedType; //å ³èç±»å DWORD RelatedID; //å ³èID WORD UnLockFuncID; //è§£éåè½ID BYTE OnceActivityTime; //å¢å æ´»è·æéæ¬¡æ° BYTE OnceActivity; //忬¡æ´»è·å¼ WORD TotalActiveValue; //æ»æ´»è· }; //æ¥å¸¸æ´»è·å¥å±è¡¨ struct tagDailyLivenessReward { BYTE _ID; //ID WORD Liveness; //æéæ´»è·åº¦ list StageLV; //é¶æ®µç级 list ItemID; //ç©åID list ItemCount; //ç©åæ°é list ItemBind; //æ¯å¦ç»å® }; //æ³å®é¸ç¼è¡¨ struct tagTreasureRefine { WORD _TreasureID; //æ³å®id BYTE _TreasureLV; //æ³å®é¶æ° dict TreasureAttr; //屿§ï¼æå¤3æ¡ï¼ dict Material; //é¸ç¼ææ WORD SuccessRate; //æåç DWORD OpenSkill; //è§£éæè½ BYTE NeedAlchemyLV; //æéç¼ä¸¹ç级 BYTE NeedAllTreasureLV; //æéæææ³å®ç级 }; //ç¼ä¸¹çç级表 struct tagRefineStove { BYTE _StoveLV; //ç¼ä¸¹çç级 DWORD UpNeedExp; //åä¸ä¸çº§æéç»éª list AddAttrType; //ççº§å æå±æ§ç±»å list AddAttrNum; //ççº§å æå±æ§å¼ }; //ç¼ä¸¹è¡¨ struct tagAlchemy { WORD _AlchemyID; //ç¼ä¸¹ç¼å· dict Material; //æéææææåæ°é WORD AlchemyExp; //ç¼ä¸¹è·å¾ç»éªå¼ list AlchemyItem; //产åºç©ååæ°éåæé list SpecAlchemyID; //ç¹æ®ç¼ä¸¹IDç» list AlchemyUp; //产åºå å«çè¿é¶ä¸¹è¯ BYTE NeedAlchemyLV; //æéç¼ä¸¹ç级 }; //ç¼ä¸¹ç¹æ®äº§åºè¡¨ struct tagAlchemySpec { WORD _SpecAlchemyID; //ç¹æ®ç¼ä¸¹ID DWORD MaterialID; //ç¹æ®ææID BYTE MaterialCnt; //ç¹æ®ææIDæ¶èä¸ªæ° WORD AlchemyExp; //ç¹æ®ææç»éª list AlchemyItem; //产åºç©ååæ°éåæé BYTE NeedAlchemyLV; //æéç¼ä¸¹ç级 }; //BOSSä¿¡æ¯è¡¨ struct tagBOSSInfo { DWORD _NPCID; //ID DWORD MapID; //å°å¾ID BYTE RefreshMark; //å·æ°æ è¯ç¹ DWORD StoneNPCID; //å¢ç¢NPCID }; //å¤ç¥ç¦å°è¡¨ struct tagElderGodArea { DWORD _NPCID; //ID BYTE MonsterAnger; //æªç©ææ°å¼ }; //个人BOSS表 struct tagPersonalBoss { DWORD _NPCID; //ID DWORD ChanllengeLv; //坿æç级 }; //ä»çæ´»è·è¡¨ struct tagFamilyActivity { DWORD _ID; //ID WORD UnLockFuncID; //è§£éåè½ID BYTE TotalActivityTime; //æ»æ¬¡æ° WORD SingleTimes; //å¢å æ´»è·éè¦æ¬¡æ° WORD SingleActiveValue; //æ¯è½®å¢å æ´»è·ç§¯å }; //ä»ç红å 表 struct tagFamilyRedPack { WORD _ID; //ID WORD GetType; //è·å¾éå¾ WORD MoneyNum; //红å é¢åº¦ BYTE MoneyType; //éé±ç±»å BYTE PacketCnt; //红å ä¸ªæ° }; //NPCç§è¡¨ struct tagNPCShow { DWORD _NPCID; DWORD _MapID; BYTE LineID; DWORD ProtectTime; //ä¿æ¤æ¶é´, æ¯«ç§ DWORD BindMissionID; //ç»å®çä»»å¡ID BYTE ShowType; //0-æå¡ç«¯éç¥,>0å端å¤ç }; //å°éåBOSS表 struct tagSealDemon { DWORD _NPCID; //ID BYTE LineID; WORD KillTime; //å»ææ»æ¶é´ç§ }; //坿¬é¼è表 struct tagFbEncourage { DWORD _DataMapID; //å°å¾ID BYTE _InspireType; //é¼èç±»å WORD InspireMaxLV; //é¼èç级éå¶ DWORD MoneyCount; //忬¡æ¶èé鱿°é }; //符å°åæè¡¨ struct tagRuneCompound { DWORD _TagItemID; //åæç符å°ç©åID list NeedItem; //éè¦çç©åID WORD NeedMJ; //éè¦çéç²¾æ°é }; //èµæºæ¾å表 struct tagResourcesBack { BYTE _ID; //ID DWORD RelatedID; //å ³èæ¥å¸¸ä»»å¡è¡¨ID BYTE CanBackTimes; //è½å¦æ¾åæ¬¡æ° BYTE NormalCostJade; //ç»çæ¾åæ®é次æ°ä»·æ ¼ WORD VipCostJade; //ç»çæ¾åVIPæ¬¡æ°æ¾åä»·æ ¼ dict JadeReward; //ç»çæ¾åå¥å± DWORD CostCopper; //é鱿¾åé鱿¶è dict CopperReward; //é鱿¾åå¥å± }; //å®ç®±è¡¨å¼å¯ struct tagChests { DWORD _ChestsItemID; //å®ç®±ç©åID DWORD CostItemID; //æ¶èç©åID BYTE CostItemCount; //æ¶èç©åä¸ªæ° WORD CostGold; //æ¶èä»ç BYTE ShowType; //å端表ç°ç±»å0-æ 表ç°, >0æè¡¨ç°éåæ¥ç»æï¼å ·ä½ç±»åå端èªå®ä¹ BYTE IsBind; //å¼åºç©åæ¯å¦ç»å® }; //å®ç®±è¡¨äº§åºè¡¨ struct tagChestsAward { DWORD _ChestsItemID; //å®ç®±ç©åID WORD AwardLV; //å®ç®±å¥å±ç级 dict SelectItemDict; //éæ©ç©åID对åºä¸ªæ°åå ¸ï¼è§å®åªè½éä¸ä¸ª dict FixedItemDict; //åºå®äº§åºç©åID对åºä¸ªæ°åå ¸ list RandItemList1; //éæºç©å饼å¾å表1 list RandTimeList1; //éæºæ¬¡æ°é¥¼å¾å表1 list RandItemList2; //éæºç©å饼å¾å表2 list RandTimeList2; //éæºæ¬¡æ°é¥¼å¾å表2 list JobItemList; //èä¸ç©åå表 BYTE MoneyType; //è´§å¸ç±»å DWORD MoneyCount; //è´§å¸æ°é list NeedNotifyItemList; //éè¦å¹¿æçç©åIDå表 }; //VIPææªå æ»å»è¡¨ struct tagVIPKillNPC { WORD _KillLV; //ææªæé¿ç级 DWORD LVExpPoint; //å级æéç»éªç¹,æ¯ä¸ªç»éªç¹ä»£è¡¨çç»éªç±é¡¹ç®å³å® DWORD LVExp; //é¤ç»éªç¹æ»ç»éªå¤å级è¿éçç»éª DWORD AddMinAtk; //å¢å æå°æ»å» DWORD AddMaxAtk; //å¢å æå¤§æ»å» }; //å ¨æ°å²æ¦æè¡å¥å±è¡¨ struct tagOSCBillRankAward { BYTE _OSCBillType; //岿¦ç±»å BYTE RankA; //æåA BYTE RankB; //è³æåB dict RankAward; //æåå¥å± {"èä¸":[[ç©åID,个æ°],...], ...} }; //å ¨æ°å²æ¦è¾¾æå¥å±è¡¨ struct tagOSCBillTagAward { BYTE _OSCBillType; //岿¦ç±»å WORD TagCondition; //ç®æ æ¡ä»¶å¼ dict TagAward; //ç®æ å¥å± {"èä¸":[[ç©åID,个æ°],...], ...} }; //ä¸å¤©ç»å½å¥å±è¡¨ struct tagLoginDayAward { BYTE _DayID; //å¤©æ° dict Reward; //å¥å± {"èä¸":[[ç©åID,个æ°],...], ...} }; //ä¸å¤©å¨çº¿å¥å±è¡¨ struct tagOnlineAward { BYTE _DayID; //å¤©æ° list StageTime; //é¶æ®µæéæ¶é´(åé) dict Reward; //å¥å± {"ç´¢å¼":[[ç©åID,个æ°],...], ...} }; //ä¸å¤©éæ¶ç¹æ 表 struct tagSpringSale { BYTE _GiftID; //礼å ID BYTE SellDay; //åè§ç¬¬å 天䏿¶ BYTE BuyNumLimit; //æ¯äººéè´æ°é WORD GiftPrice; //礼å ä»·æ ¼ï¼ä»ç list GiftItemList; //礼å ç©åä¿¡æ¯å表[[ç©åID,个æ°,æ¯å¦ç»å®], ...] }; //å å¼ååç¼å·è¡¨ struct tagOrderInfo { char _OrderInfo; //ååç¼å· char _AppID; //appID float PayRMBNum; //ä»è´¹é¢åº¦ï¼å DWORD CTGID; //对åºå å¼ID DWORD GiftbagID; //对åºéæ¶ç¤¼å ç¼å· }; //å å¼è¡¨ struct tagCTG { BYTE _RecordID; //è®°å½ID BYTE DailyBuyCount; //æ¯æ¥éè´æ¬¡æ° WORD GainGold; //è·å¾ä»çæ° WORD GainGoldPrize; //èµ éä»çæ° WORD FirstGoldPrize; //馿¬¡å å¼è¯¥æ¡£ä½èµ éä»ç list GainItemList; //è·å¾ç©åå表[[ç©åID,个æ°,æ¯å¦ç»å®], ...] }; //ç级å¥å±è¡¨ struct tagLVAward { BYTE _AwardID; //å¥å±ID WORD LV; //ç级 WORD LimitCnt; //å ¨æéå¶æ°é dict Reward; //å¥å± {"èä¸":[[ç©åID,个æ°],...], ...} BYTE VIPLimit; //éè¦VIPå list VIPAward; //vipå¥å±[[ç©åID,个æ°],...] }; //æèµè¡¨ struct tagInvest { WORD _ID; //ID BYTE Type; //æèµç±»å BYTE NeedDay; //éè¦å¤©æ° WORD NeedLV; //éè¦ç级 dict Reward; //å¥å± {"key":[[ç©åID,个æ°,æ¯å¦ç»å®],...], ...} }; //ä»å®å¯»ä¸»è¡¨ struct tagXBXZ { DWORD _ID; //ID BYTE Type; //ç±»å DWORD NeedCnt; //éè¦æ°é list Condition; //æ¡ä»¶ WORD MWID; //æ³å®ID list AwardItem; //å¥å±ç©åå表 list Money; //éé± }; //寻å®äº§åºåºè¡¨ struct tagTreasureHouse { BYTE _TreasureType; //寻å®ç±»å WORD MinLV; //æå°ç级 dict GridItemInfo; //æ ¼åç¼å·å¯¹åºç©åä¿¡æ¯ {"ç¼å·":[ç©åID, 个æ°], ...} list JobItemList; //èä¸ç©åç»å表 [[èä¸1ç©å, èä¸2ç©å, ...], ...] list GridItemRateListFree; //å è´¹äº§åºæ ¼åç¼å·é¥¼å¾ [[æ¦ç, æ ¼åç¼å·], ...] list GridItemRateList1; //常è§äº§åºæ ¼åç¼å·é¥¼å¾ [[æ¦ç, æ ¼åç¼å·], ...] list GridItemRateList2; //æ¯æ»¡x次ä¿åºäº§åºæ ¼åç¼å·é¥¼å¾ [[æ¦ç, æ ¼åç¼å·], ...] dict GridItemRateList3; //第xæ¬¡å¿ åºäº§åºæ ¼åç¼å·é¥¼å¾ {次æ°:[[æ¦ç, æ ¼åç¼å·], ...], ...} BYTE LuckyGridNum; //幸è¿å ææ ¼åç¼å· }; //æåç½æ¿è¡¨ struct tagFreeGoods { BYTE _ID; //ID dict AwardItem; //å¥å± {"èä¸":[[ç©åID,个æ°],...], ...} WORD NeedMoney; //éè¦ä»ç DWORD ReturnTime; //è¿è¿æ¶é´(s) }; //éæ¶ç¤¼å æ´»å¨è¡¨ struct tagActFlashGiftbag { DWORD _CfgID; //é ç½®ID char StartDate; //å¼å¯æ¥æ char EndDate; //ç»ææ¥æ list StartTimeList; //å¼å¯æ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ list EndTimeList; //ç»ææ¶é´å表, æ¯æå¤ä¸ªæ¶æ®µ WORD LVLimit; //éå¶ç级 BYTE IsDayReset; //æ¯å¦æ¯å¤©éç½® list GiftbagList; //ç¤¼å æ¨¡æ¿ç±»åå表 }; //éæ¶ç¤¼å æ¨¡æ¿è¡¨ struct tagFlashGiftbag { DWORD _GiftbagID; //礼å ç¼å· WORD GiftbagType; //礼å ç±»å DWORD OriginalRMB; //åä»·ï¼RMBï¼ WORD BuyCountLimit; //éè´æ¬¡æ°,0ä¸éè´ list GiftItemList; //礼å ç©åä¿¡æ¯å表 [(ç©åID,个æ°,æ¯å¦ç»å®),...] DWORD MainItemID; //æ çç©åID char NotifyKey; //å ¨æå¹¿ækeyï¼é»è®¤ä¸¤ä¸ªåæ°(ç©å®¶å, æ¡£ä½é¢åº¦) }; //æ¶è´¹è¿å©æ¨¡æ¿è¡¨ struct tagCostRebateTemplate { DWORD _TemplateID; //模æ¿ID DWORD NeedCostGold; //éè¦æ¶è´¹ä»çæ° BYTE AwardIndex; //è¿å©å¥å±ç´¢å¼0~31,å个模æ¿ä¸ä¸éå¤ list AwardItemList; //è¿å©ç©åä¿¡æ¯å表 [(ç©åID,个æ°,æ¯å¦ç»å®),...] char NotifyKey; //å ¨æå¹¿ækeyï¼é»è®¤ä¸¤ä¸ªåæ°(ç©å®¶å, æ¡£ä½é¢åº¦) }; //BOSS夿´»è¡¨ struct tagBossReborn { BYTE _ID; //ID DWORD TotalTimes; //å¯å®æçæ»æ¬¡æ°ï¼0表示ä¸éæ¬¡æ° WORD SingleTimes; //忬¡é¢å¥éè¦çæ¬¡æ° list RewardItemID1; //å¥å±ç©åID1 list RewardItemCnt1; //å¥å±ç©åæ°é1 list RewardItemID2; //å¥å±ç©åID2 list RewardItemCnt2; //å¥å±ç©åæ°é2 list RewardItemID3; //å¥å±ç©åID3 list RewardItemCnt3; //å¥å±ç©åæ°é3 list WorldLVList; //ä¸çç级 }; //å®é¨è¯ç¼å æ¢è¡¨ struct tagTrialExchange { DWORD _ID; //å æ¢ID DWORD ExchangeItemID; //å æ¢ç©åID DWORD ExchangeItemCount; //å æ¢ç©åä¸ªæ° DWORD ExchangeItemIsBind; //å æ¢ç©åæ¯å¦ç»å® DWORD CostItemID; //æ¶èç©åID DWORD CostItemCount; //æ¶èç©åä¸ªæ° }; //ä»ççå ¸-å ¨æ°æ¥å¨è¡¨ struct tagAllPeopleParty { BYTE _ID; //ID WORD TotalTimes; //æ»æ¬¡æ° WORD AddPoint; //æ¯å®ææ¬¡æ°è·å¾å¨ç¹ }; //ä»ççå ¸-å ¨æ°æ¥å¨å¥å±è¡¨ struct tagAllPeoplePartyAward { BYTE _WorldLvNum; //ä¸çç级档 DWORD _Index; //ç´¢å¼ DWORD NeedPoint; //éè¦ç¹æ° dict Award; //å¥å± {"èä¸":[[ç©åID,个æ°,æ¯å¦ç»å®],...], ...} }; PySysDB/Éú³ÉIpyGameDataPY/IpyGameDataPYCreater.py
New file @@ -0,0 +1,199 @@ #!/usr/bin/python # -*- coding: GBK -*- # 导åºPYçæ¬ç¨ç IpyGameDataPY.py import ConfigParser import sys import os import re cfg = ConfigParser.ConfigParser() cfg.read("config.ini") CodeProjectPath = cfg.get("config", "CodeProjectPath") # 代ç 项ç®è·¯å¾ IpyGameDataFile = "IpyGameDataPY.py" # çæçpyæä»¶å # è¡¨ç»æå®ä¹åå ¸æ¨¡æ¿ TableDefKey = " \"%s\":(%s" TableDefValue = " (\"%s\", \"%s\", %s),%s" TableDefEnd = " ),%s" # ç±»ç»ææ¨¡æ¿ ClassTemp = ''' # %s class IPY_%s(): def __init__(self): %s return %s ''' # ç±»åå§åæ°å¼å¯¹è±¡æ¨¡æ¿ ClassInitTemp = " self.%s = %s%s" # è·åç±»å¯¹è±¡å½æ°æ¨¡æ¿ ClassFuncTemp = " def Get%s(self): return self.%s%s%s" # 管çå¨åå§åè¡¨æ°æ®ç¼ååè¡¨å¯¹è±¡æ¨¡æ¿ MgrTableCacheInit = " self.ipy%sCache = self.__LoadFileData(\"%s\", IPY_%s)%s" MgrTableLenInit = " self.ipy%sLen = len(self.ipy%sCache)%s" # 管çå¨è·åè¡¨æ°æ®æ¡æ°å½æ°æ¨¡æ¿ MgrGetCountFunc = " def Get%sCount(self): return self.ipy%sLen%s" # 管ç卿 ¹æ®ç´¢å¼è·åè¡¨æ°æ®å½æ°æ¨¡æ¿ MgrGetByIndexFunc = " def Get%sByIndex(self, index): return self.ipy%sCache[index]%s" Def_RN = "\r\n" def DoCreateIpyGameDataPY(): print "=================================================" print "Number of arguments:", len(sys.argv), "arguments." StructFileName = sys.argv[1] if StructFileName == "PySysDBPY.h": IpyGameDataPYFile = CodeProjectPath + "\\ZoneServerGroup\\map1_8G\\MapServer\\MapServerData\\Script\\" LoadStructPath = "ChConfig.GetDBPath()" elif StructFileName == "PySysDBG.h": IpyGameDataPYFile = CodeProjectPath + "\\CoreServerGroup\\GameServer\\Script\\" LoadStructPath = "ChConfig.GetAppPath()" else: print "䏿¯æè¯¥è¡¨ç»ææä»¶!%s" % StructFileName raise IpyGameDataPYFile += IpyGameDataFile # 读åè¡¨ç»æå®ä¹ print "å è½½é ç½®è¡¨ç»æ: %s" % StructFileName fileObj = open("../%s" % StructFileName, 'rb') content = fileObj.read() fileObj.close() # è§£æè¡¨ç»æå®ä¹ Def_FuncConfigName = "FuncConfig" # åè½é 置表, æ¤è¡¨ç¹æ®å¤ç TableNameList = [] # ç¡®ä¿è¡¨ç»æå¯¼åºé¡ºåºä¸è´, 鲿¢çæ¬å¯¹æ¯æ··ä¹± Def_IpyTable = {} Def_FieldTypeList = ["DWORD", "WORD", "BYTE", "char", "dict", "list", "eval", "float"] structList = re.findall("\/\/.*?struct.*?\{.*?\};", content, re.S) for structStr in structList: lineList = structStr.split(Def_RN) tableInfoStr = lineList[0] if "#tag" in tableInfoStr: tagIndex = tableInfoStr.index("#tag") tableNameCh = tableInfoStr[2:tagIndex].replace(" ", "") # 表å䏿å else: tableNameCh = tableInfoStr[2:].replace(" ", "") # 表å䏿å tableName = "" # 表åè±æå fieldInfoList = [] for line in lineList[1:]: if not line: continue if "struct" in line: tagIndex = line.index("tag") if "{" in line: tableName = line[tagIndex + 3:line.index("{")] else: tableName = line[tagIndex + 3:] tableName = tableName.replace(" ", "") # 表åè±æå continue noteInfo = "" # åæ®µæ³¨é说æ if "//" in line: signIndex = line.index("//") noteInfo = " # %s" % line[signIndex+2:].rstrip() line = line[:signIndex] fieldType = "" for ft in Def_FieldTypeList: if ft in line: fieldType = ft break if not fieldType: if "struct" not in line and "{" not in line and "}" not in line: print "### ç±»åå®ä¹é误表 ###" print "struct tag%s" % tableName print line raise continue nameIndex = line.index(fieldType) + len(fieldType) if "[" in line: endIndex = line.index("[") elif ";" in line: endIndex = line.index(";") else: continue isIndex = 0 # æ¯å¦æç´¢ç´¢å¼ fieldName = line[nameIndex:endIndex].replace(" ", "").replace("\t", "") if fieldName.startswith("_"): fieldName = fieldName[1:] isIndex = 1 fieldInfoList.append([fieldType, fieldName, isIndex, noteInfo]) Def_IpyTable[tableName] = [tableNameCh, fieldInfoList] TableNameList.append(tableName) # æ¨¡æ¿æéæ¿æ¢çå 容忰 ipyTableDef = "" # è¡¨ç»æå®ä¹ classContent = "" # 表对åºçç±» mgrTableCacheObjInit = "" # è¡¨æ°æ®å¯¹è±¡ç¼å mgrTableFunc = "" # è¡¨æ°æ®å¯¹è±¡è·å彿° for i, tableName in enumerate(TableNameList): tableNameCh, fieldInfoList = Def_IpyTable[tableName] classInitInfo = "" classFuncInfo = "" ipyTableDef += TableDefKey % (tableName, Def_RN) for j, fieldInfo in enumerate(fieldInfoList): lineEnd = "" if j == len(fieldInfoList) - 1 else Def_RN fieldType, fieldName, isIndex, noteInfo = fieldInfo ipyTableDef += TableDefValue % (fieldType, fieldName, isIndex, Def_RN) if fieldType == "char": classInitInfo += ClassInitTemp % (fieldName, "\"\"", lineEnd) elif fieldType == "dict": classInitInfo += ClassInitTemp % (fieldName, "{}", lineEnd) elif fieldType == "list": classInitInfo += ClassInitTemp % (fieldName, "[]", lineEnd) elif fieldType == "float": classInitInfo += ClassInitTemp % (fieldName, "0.0", lineEnd) else: classInitInfo += ClassInitTemp % (fieldName, "0", lineEnd) classFuncInfo += ClassFuncTemp % (fieldName, fieldName, noteInfo, lineEnd) ipyTableDef += TableDefEnd % (Def_RN if i == len(Def_IpyTable) - 1 else (Def_RN * 2)) classContent += ClassTemp % (tableNameCh, tableName, classInitInfo, classFuncInfo) # 表å表ãé¿åº¦å¯¹è±¡ç¼å mgrTableCacheObjInit += MgrTableCacheInit % (tableName, tableName, tableName, Def_RN) mgrTableCacheObjInit += MgrTableLenInit % (tableName, tableName, Def_RN) # 表å表ãé¿åº¦è·å彿° mgrTableFunc += MgrGetCountFunc % (tableName, tableName, Def_RN) mgrTableFunc += MgrGetByIndexFunc % (tableName, tableName, Def_RN) # è¯»åæ¨¡æ¿çæpy代ç createPYContent = "" template = open("IpyGameDataPYTemp.py", 'rb') for line in template: if "#<%Table_Def%>" in line: line = ipyTableDef elif "#<%Table_Class%>" in line: line = classContent elif "#<%Ipy_Cache_Init%>" in line: line = mgrTableCacheObjInit elif "\"<%LoadStructPath%>\"" in line: line = line.replace("\"<%LoadStructPath%>\"", LoadStructPath) elif "#<%Ipy_Cache_Func%>" in line: line = mgrTableFunc createPYContent += line template.close() pyFile = open(IpyGameDataPYFile, "wb") pyFile.write("%s" % createPYContent) pyFile.close() print "æåçæ: %s" % IpyGameDataFile print "导åºè·¯å¾: %s" % IpyGameDataPYFile return DoCreateIpyGameDataPY() PySysDB/Éú³ÉIpyGameDataPY/IpyGameDataPYTemp.py
New file @@ -0,0 +1,465 @@ #!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package # # @todo:读åPY表 # @author hxp # @date 2018-05-10 # @version 1.0 # # è¯¦ç»æè¿°: 读åPY表 # #------------------------------------------------------------------------------- #"""Version = 2018-05-10 12:00""" #------------------------------------------------------------------------------- import FormulaControl import ChConfig import LogUI import hashlib import os '''è¡¨ç»æå®ä¹åå ¸ { 表å:( (åæ®µç±»å, åæ®µå, æ¯å¦æ¥è¯¢ç´¢å¼), ... ), ... } ''' Def_IpyTable = { #<%Table_Def%> } #<%Table_Class%> def Log(msg, playerID=0, par=0): LogUI.Msg("%s\t%s\t%s" % (par, playerID, msg)) return def ErrLog(msg, playerID=0, par=0): LogUI.Msg("%s\t%s\t###Error:%s" % (par, playerID, msg)) return ## PYè¡¨æ°æ®ç®¡çç±» class IPY_DataMgr(): def __init__(self): self.fileMD5Dict = {} # æ°æ®è¡¨æä»¶md5åå ¸, ç¨äºå¯¹æ¯æä»¶å·®å¼å¤ææ¯å¦é读 {dtName:md5, ...} self.ipyConfigEx = {} # èªå®ä¹æ°æ®ç¼å {key:configData, ...} self.ipyDataIndexMap = {} # æ°æ®è¡¨ç´¢å¼æ¥è¯¢ç¼å {dtName:{args:[index, ...], ...}, ...} self.ipyDataIndexMapEx = {} # æ°æ®è¡¨èªå®ä¹æ¥è¯¢æ¡ä»¶æ¥è¯¢ç¼å {dtName_(findKey,...):{(findKeyValue, ...):[index, ...], ...}, ...} self.ipyFuncConfigDict = {} # åè½é 置表ç¼å {key:IPY_FuncConfig, ...} self.IpyDataClear() return def IpyDataClear(self): Log("IPY_DataMgr Init...") self.ipyConfigEx = {} #<%Ipy_Cache_Init%> Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict)) Log("IPY_DataMgr InitOK!") return def __LoadFileData(self, tableName, Class): curPath = "<%LoadStructPath%>" + "\\PySysDB\\tag" + tableName + ".txt" if not os.path.isfile(curPath): ErrLog("can not find file = %s,%s" % (tableName, curPath)) raise Exception("can not find file = %s,%s" % (tableName, curPath)) fileObj = open(curPath, 'rb') content = fileObj.read() fileObj.close() md5_obj = hashlib.md5() md5_obj.update(content) newMD5Code = md5_obj.hexdigest() if tableName in self.fileMD5Dict: oldMD5Code = self.fileMD5Dict[tableName] if newMD5Code == oldMD5Code: return getattr(self, "ipy%sCache" % tableName) if tableName in self.ipyDataIndexMap: self.ipyDataIndexMap.pop(tableName) for dtName_Findkey in self.ipyDataIndexMapEx.keys(): findStr = "%s_" % tableName if findStr in dtName_Findkey: self.ipyDataIndexMapEx.pop(dtName_Findkey) if tableName == "FuncConfig": self.ipyFuncConfigDict = {} self.fileMD5Dict[tableName] = newMD5Code dataIndex = 0 indexDict = {} cacheList = [] fieldList = Def_IpyTable[tableName] infoList = content.split('\r\n') for line in xrange(len(infoList)): if line == 0: continue if not infoList[line]: #ErrLog("line not content! %s, line=%s" % (tableName, line)) continue rowList = infoList[line].split('\t') if len(fieldList) != len(rowList): ErrLog("field count error!, %s, line=%s, len=%s,rowCount=%s" % (tableName, line, len(fieldList), len(rowList))) raise Exception("field count error!, %s, line=%s, len=%s,rowCount=%s" % (tableName, line,len(fieldList), len(rowList))) try: indexKey = [] classObj = Class() for j, value in enumerate(rowList): fieldType, fieldName, isIndex = fieldList[j] if fieldType == "char": attrValue = value elif fieldType == "dict": attrValue = self.__StrToDict(value) elif fieldType == "list": attrValue = self.__StrToList(value) elif fieldType == "eval": attrValue = self.__StrToEval(value) elif fieldType == "float": attrValue = float(value) else: attrValue = 0 if not value.isdigit() else int(value) setattr(classObj, "%s" % fieldName, attrValue) if isIndex: indexKey.append(attrValue) cacheList.append(classObj) indexKey = tuple(indexKey) indexList = indexDict.get(indexKey, []) indexList.append(dataIndex) indexDict[indexKey] = indexList dataIndex += 1 except BaseException: ErrLog("SetIpyDataError: tableName=%s,line=%s,fieldName=%s,fieldType=%s,value=%s" % (tableName, line, fieldName, fieldType, value)) raise if tableName == "FuncConfig": self.__LoadFuncConfigData(fieldList, rowList) if tableName != "FuncConfig": self.ipyDataIndexMap[tableName] = indexDict Log("LoadIpydata: %s, content count=%s" % (tableName, len(cacheList))) return cacheList def __LoadFuncConfigData(self, fieldList, rowList): funcConfigObj = IPY_FuncConfig() key = rowList[0] funcConfigObj.Key = key for i, strValue in enumerate(rowList): if i == 0: continue fieldName = fieldList[i][1] strValue = strValue.lstrip().rstrip() if strValue.isdigit(): configValue = int(strValue) elif (strValue.startswith("{") and strValue.endswith("}")) \ or (strValue.startswith("[") and strValue.endswith("]")) \ or (strValue.startswith("(") and strValue.endswith(")")): configValue = eval(strValue) elif "_" in strValue and type(self.__StrToDict(strValue)) == dict: configValue = self.__StrToDict(strValue) elif ChConfig.Def_Str_Montant in strValue: configValue = eval("(%s,)" % strValue.replace(ChConfig.Def_Str_Montant, ",")) elif strValue in ["-", ""]: configValue = "" else: configValue = self.__ToFloat(strValue) setattr(funcConfigObj, fieldName, configValue) self.ipyFuncConfigDict[key] = funcConfigObj return def __ToFloat(self, strValue): try: value = float(strValue) except: return strValue return value def __StrToEval(self, strValue): if not strValue or strValue in ["0", "-", ""]: return return eval(strValue) def __StrToDict(self, strValue): setDict = {} if "{" in strValue and "}" in strValue: setDict = eval(strValue) elif strValue in ["0", "-", ""]: pass else: keyValueList = strValue.split(ChConfig.Def_Str_Montant) for keyValue in keyValueList: if "_" not in keyValue: continue kv = keyValue.split("_") if len(kv) != 2: return key, value = kv if key.isdigit(): key = int(key) if value.isdigit(): value = int(value) setDict[key] = value return setDict def __StrToList(self, strValue): setList = [] if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue): setList = eval(strValue) elif strValue in ["0", "-", ""]: pass elif strValue.isdigit(): setList = (int(strValue),) else: for value in strValue.split(ChConfig.Def_Str_Montant): if value.isdigit(): value = int(value) setList.append(value) if setList: setList = tuple(setList) return setList #<%Ipy_Cache_Func%> IPYData = IPY_DataMgr() def IPY_Data(): return IPYData def GetConfigEx(key): '''è·åèªå®ä¹keyç¼åæ°æ® ''' if key in IPYData.ipyConfigEx: return IPYData.ipyConfigEx[key] return def SetConfigEx(key, configData): '''设置èªå®ä¹keyç¼åæ°æ® æäºè¡¨çé ç½®å 容å¯è½å¨å®é åè½ä½¿ç¨ä¸ç´æ¥ä½¿ç¨è¡¨æ°æ®çè¯ä¼æ¯è¾éº»ç¦ï¼æ¯å¦æ¯æ¬¡é½è¦éåè·åä¸äºè¡¨æ°æ® 妿ç»è¿ä¸å±æ°æ®è½¬æ¢ååæ¥ä½¿ç¨è¯¥æ°æ®çè¯ä¼ç®ååè½é»è¾ææé«æçï¼åå¯ä»¥éè¿å½æ°ä¿åä¸äºèªå®ä¹çç¼åå å®¹ï¼æ¹ä¾¿åè½ä½¿ç¨ ä¹å¯ä»¥éç¨äºå ¶ä»èªå®ä¹ç¼ååå¨ ''' IPYData.ipyConfigEx[key] = configData return configData def GetIpyGameData(dtName, *args): '''è·åè¡¨æ°æ®ï¼éç¨äºæ°æ®å¯ä¸çï¼è¿ååæ¡æ°æ®å®ä¾ @param dtName: 表åï¼ä¸å«tag @param args: 建表æ¶è®¾ç½®çç´¢å¼å段顺åºå¯¹åºçæ¥è¯¢å¼ @return: å¯¹åºæ¥è¯¢æ¡ä»¶ç ipyData æ°æ®å®ä¾ï¼åªè¿åå个å®ä¾ @使ç¨è¯´æ: IpyGameDataPY.GetIpyGameData(表å, ç´¢å¼1æ¥è¯¢å¼, ç´¢å¼2æ¥è¯¢å¼, ⦠) ''' if dtName not in IPYData.ipyDataIndexMap: ErrLog("Can not found ipyData dtName=%s" % (dtName)) return indexDict = IPYData.ipyDataIndexMap[dtName] if args not in indexDict: ErrLog("Can not found ipyData dtName=%s,indexValue=%s" % (dtName, args)) return indexList = indexDict[args] return getattr(IPYData, "ipy%sCache" % dtName)[indexList[0]] def GetIpyGameDataList(dtName, *args): '''è·åè¡¨æ°æ®ï¼éç¨äºæ¥è¯¢ç»ææå¤æ¡æ°æ®ç @param dtName: 表åï¼ä¸å«tag @param args: 建表æ¶è®¾ç½®çç´¢å¼å段顺åºå¯¹åºçæ¥è¯¢å¼ @return: å¯¹åºæ¥è¯¢æ¡ä»¶ç ipyData æ°æ®å®ä¾å表 @使ç¨è¯´æ: ä¸ GetIpyGameData 彿°ç¸å ''' if dtName not in IPYData.ipyDataIndexMap: ErrLog("Can not found ipyDataList dtName=%s" % (dtName)) return indexDict = IPYData.ipyDataIndexMap[dtName] if args not in indexDict: ErrLog("Can not found ipyDataList dtName=%s,indexValue=%s" % (dtName, args)) return indexList = indexDict[args] dataCache = getattr(IPYData, "ipy%sCache" % dtName) return [dataCache[i] for i in indexList] def GetIpyGameDataNotLog(dtName, *args): '''ä¸ GetIpyGameData 彿°ç¸å, åªæ¯æ¾ä¸å°æ°æ®æ¶ä¸ä¼è¾åºæ¥å¿ ''' if dtName not in IPYData.ipyDataIndexMap: #ErrLog("Can not found ipyData dtName=%s" % (dtName)) return indexDict = IPYData.ipyDataIndexMap[dtName] if args not in indexDict: #ErrLog("Can not found ipyData dtName=%s,indexValue=%s" % (dtName, args)) return indexList = indexDict[args] return getattr(IPYData, "ipy%sCache" % dtName)[indexList[0]] def GetIpyGameDataListNotLog(dtName, *args): '''ä¸ GetIpyGameDataList 彿°ç¸å, åªæ¯æ¾ä¸å°æ°æ®æ¶ä¸ä¼è¾åºæ¥å¿ ''' if dtName not in IPYData.ipyDataIndexMap: #ErrLog("Can not found ipyDataList dtName=%s" % (dtName)) return indexDict = IPYData.ipyDataIndexMap[dtName] if args not in indexDict: #ErrLog("Can not found ipyDataList dtName=%s,indexValue=%s" % (dtName, args)) return indexList = indexDict[args] dataCache = getattr(IPYData, "ipy%sCache" % dtName) return [dataCache[i] for i in indexList] def GetIpyGameDataByCondition(dtName, keyDict={}, returnList=False, isLogNone=True): '''æ ¹æ®èªå®ä¹æ¥è¯¢æ¡ä»¶æ¥è¯¢è¡¨æ°æ®ï¼ç±äºç®ååªæ¯æå»ºç«ä¸ç»æ¥è¯¢ç´¢å¼ï¼æä»¥ä½¿ç¨å ¶ä»æ¥è¯¢æ¡ä»¶æ¥è¡¨æ¶åªè½éè¿è¯¥å½æ°æ¥æ¾ @param dtName: 表åï¼ä¸å«tag @param keyDict: æ¥è¯¢æ¡ä»¶åå ¸ {æ¥è¯¢å段å:æ¥è¯¢å¼, ...} @param returnList: æ¯å¦ä»¥å表çå½¢å¼è¿åæ¥è¯¢æ°æ®ï¼é»è®¤å¦ @param isLogNone: æ¾ä¸å°æ°æ®æ¶æ¯å¦æ°æ®æ¥å¿ï¼é»è®¤æ¯ @return: æ¾ä¸å°æ°æ®æ¶è¿å Noneï¼ææ°æ®æ¶æ ¹æ®åæ°æ¯å¦è¿åå表è¿å对åºçæ°æ®å®ä¾ææ°æ®å®ä¾å表 ''' fieldList = keyDict.keys() valueList = keyDict.values() findFieldKey = "%s_%s" % (dtName, fieldList) findValueKey = tuple(valueList) cacheList = getattr(IPYData, "ipy%sCache" % dtName) if findFieldKey not in IPYData.ipyDataIndexMapEx: indexMapDict = {} for index, iData in enumerate(cacheList): valuekey = tuple([getattr(iData, "%s" % field) for field in fieldList]) indexList = indexMapDict.get(valuekey, []) indexList.append(index) indexMapDict[valuekey] = indexList IPYData.ipyDataIndexMapEx[findFieldKey] = indexMapDict indexMapDict = IPYData.ipyDataIndexMapEx[findFieldKey] if findValueKey not in indexMapDict: if isLogNone: ErrLog("GetIpyGameDataByCondition can not found data! %s %s" % (dtName, keyDict)) return indexList = indexMapDict[findValueKey] if not returnList: return cacheList[indexList[0]] return [cacheList[index] for index in indexList] def GetFuncCfgIpyData(key): '''读åè½é 置表é ç½®å®ä¾ @param key: é ç½®key @return: ç´æ¥è¿å该é ç½®key对åºçé ç½®ipyDataå®ä¾ ''' if key not in IPYData.ipyFuncConfigDict: ErrLog("Can not found ipyData FuncConfig key=%s!" % key) return "" return IPYData.ipyFuncConfigDict[key] def GetFuncCfg(key, index=1): '''读åè½é 置表é ç½®ä¸ç¨å½æ° @param key: é ç½®key @param index: 第å 个é ç½®å¼ï¼æ¯æ1~5 @return: ç´æ¥è¿å对åºçæ°æ®ç±»å intãstrï¼ä¸ç¨åæå¨è½¬int ''' if key not in IPYData.ipyFuncConfigDict: ErrLog("Can not found ipyData FuncConfig key=%s!" % key) return "" cfgObj = IPYData.ipyFuncConfigDict[key] if index == 1: return cfgObj.Numerical1 if index == 2: return cfgObj.Numerical2 if index == 3: return cfgObj.Numerical3 if index == 4: return cfgObj.Numerical4 if index == 5: return cfgObj.Numerical5 ErrLog("Can not found ipyData FuncConfig key=%s,index=%s!" % (key, index)) return "" def GetFuncEvalCfg(key, index=1, defaultValue=[]): '''读ååè½é 置表é ç½®å表ãåå ¸æ ¼å¼ä¸ç¨å½æ° @param key: é ç½®key @param index: 第å 个é ç½®å¼ï¼æ¯æ1~5 @return: ç´æ¥è¿å对åºçæ°æ®ç±»å listãdictãtupleï¼ä¸ç¨åeval ç±äºçåæèªå®ä¹çåè¡¨ç»æ obj|⦠, å½è¯¥å表é ç½®åªæä¸ä¸ªå ç´ æ¶ï¼æ¤æ¶é ç½®çå 容为å个æ°å¼ï¼å è½½çé ç½®çæ¶åæ¤æ¡æ°æ®ä¼è¢«è½¬ä¸ºintå æ 使ç¨è¯¥ä¸ç¨å½æ°è¿ååè¡¨ç»æï¼æ¹ä¾¿åè½å¼åæ¶ä¸ç¨åèèå表为intæ¶çæ åµï¼ å½ç¶å¦æé ç½®çå 容æ¬èº«å°±ä¸ºpythonçå表ãåå ¸ç»æçè¯å¯ä½¿ç¨ä¸é¢ç彿° ä¸è¿ä¸ºäºç»ä¸ï¼å»ºè®®åè½é 置表读å表ãåå ¸æ¶é½ä½¿ç¨è¯¥å½æ° ''' if key not in IPYData.ipyFuncConfigDict: ErrLog("Can not found ipyData FuncConfig key=%s!" % key) return defaultValue cfgObj = IPYData.ipyFuncConfigDict[key] if index == 1: curConfig = cfgObj.Numerical1 elif index == 2: curConfig = cfgObj.Numerical2 elif index == 3: curConfig = cfgObj.Numerical3 elif index == 4: curConfig = cfgObj.Numerical4 elif index == 5: curConfig = cfgObj.Numerical5 else: ErrLog("Can not found ipyData FuncConfig key=%s,index=%s!" % (key, index)) return defaultValue curType = type(curConfig) if curType in [list, tuple, dict]: return curConfig if curType == int: return [curConfig] return defaultValue def GetFuncCompileCfg(key, index=1): '''è·ååè½é 置表已ç¼è¯è¿çå ¬å¼ @param key: é ç½®key @param index: 第å 个é ç½®å¼ï¼æ¯æ1~5 @return: è¿åå·²ç¼è¯è¿çå ¬å¼ ''' return FormulaControl.GetCompileFormula(key + str(index), str(GetFuncCfg(key, index))) def InterpolationSearch(dtName, keyName, keyValue, conditionDict={}): '''æ¥è¯¢æ¡ä»¶ä¸ä¸å¯¹åºæ¥è¯¢å段åèå¼ç¸è¿çæ°æ®å®ä¾ï¼åèå¼å°äºé 置表æå°å¼æ¶è¿ånoneï¼å¤§äºæå¤§å¼æ¶è¿åæå¤§å¼å¯¹åºçå®ä¾ @param dtName: 表åï¼ä¸å«tag @param keyName: åèåæ®µå @param keyValue: åèåæ®µå¼ @param conditionDict: æ¥è¯¢æ¡ä»¶ï¼{æ¥è¯¢å段å:åæ®µå¼, ...} @return: æ¾ä¸å°æ°æ®è¿å None ï¼ å¦åè¿å对åºç ipyData æ°æ®å®ä¾ ''' if not conditionDict: dataList = getattr(IPYData, "ipy%sCache" % dtName) else: dataList = GetIpyGameDataByCondition(dtName, conditionDict, True) if not dataList: return low = 0 lowData = dataList[0] lowValue = getattr(lowData, "%s" % keyName) if keyValue < lowValue: return high = len(dataList) - 1 highData = dataList[high] highValue = getattr(highData, "%s" % keyName) if keyValue >= highValue: return highData near = low + int((high - low) * (keyValue - lowValue)/(highValue - lowValue)) nearData = dataList[near] nearValue = getattr(nearData, "%s" % keyName) if keyValue < nearValue: for i in xrange(near - 1, low - 1, -1): nearData = dataList[i] nearValue = getattr(nearData, "%s" % keyName) if nearValue < keyValue: return nearData elif keyValue > nearValue: for i in xrange(near + 1, high + 1): nearData = dataList[i] nearValue = getattr(nearData, "%s" % keyName) if nearValue > keyValue: return dataList[i - 1] return nearData PySysDB/Éú³ÉIpyGameDataPY/Ipyϵͳ±íʹÓÃ˵Ã÷.docxBinary files differ
PySysDB/Éú³ÉIpyGameDataPY/config.ini
New file @@ -0,0 +1,5 @@ [config] ; é¡¹ç®æ ¹è·¯å¾ CodeProjectPath = E:\U3DGameGit\SnxxServerCode\ServerPython PySysDB/Éú³ÉIpyGameDataPY/Éú³ÉIpyGameDataPY_GameServer.bat
New file @@ -0,0 +1,2 @@ python IpyGameDataPYCreater.py PySysDBG.h pause PySysDB/Éú³ÉIpyGameDataPY/Éú³ÉIpyGameDataPY_MapServer.bat
New file @@ -0,0 +1,2 @@ python IpyGameDataPYCreater.py PySysDBPY.h pause