H.D.D. and Combat commissions implementation

Implement Combat commissions (PureHollowBattle and LongFight) (including Rally commissions)
Refactor some battle structures
Unlock hollow quests (QuestInfo and YorozuyaInfo)
This commit is contained in:
xeon 2024-08-05 17:45:13 +03:00
parent f99165e452
commit 50f694add0
34 changed files with 131305 additions and 143 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,212 @@
[
{
"ID": 100001,
"FOPDNLNNHDJ": 1000,
"DIIDBBGLDOL": "HollowGroupNameText_Arcade",
"EFPBDDJIJBO": "1040140114",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_RallyQuest.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_L.prefab",
"LDKNDDHOHND": "FF0019FF",
"EEBAIANJMEC": "006EFFFF|FF001900",
"EKMLECIKMID": false,
"FNIGJDFMHBA": "",
"BECFHCOGPKG": ""
},
{
"ID": 100101,
"FOPDNLNNHDJ": 1001,
"DIIDBBGLDOL": "HollowGroupNameText_Story",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Story.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M.prefab",
"LDKNDDHOHND": "FF9500FF",
"EEBAIANJMEC": "FF9500FF|FFDE0000",
"EKMLECIKMID": false,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_01"
},
{
"ID": 100102,
"FOPDNLNNHDJ": 1001,
"DIIDBBGLDOL": "HollowGroupNameText_exploration",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Explore.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M02.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips03.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_03"
},
{
"ID": 100103,
"FOPDNLNNHDJ": 1001,
"DIIDBBGLDOL": "HollowGroupNameText_combat",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Combat.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_S.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips02.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_02"
},
{
"ID": 100201,
"FOPDNLNNHDJ": 1002,
"DIIDBBGLDOL": "HollowGroupNameText_Story",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Story.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M.prefab",
"LDKNDDHOHND": "FF9500FF",
"EEBAIANJMEC": "FF9500FF|FFDE0000",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_01"
},
{
"ID": 100202,
"FOPDNLNNHDJ": 1002,
"DIIDBBGLDOL": "HollowGroupNameText_exploration",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Explore.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M02.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips03.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_03"
},
{
"ID": 100203,
"FOPDNLNNHDJ": 1002,
"DIIDBBGLDOL": "HollowGroupNameText_combat",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Combat.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_S.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips02.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_02"
},
{
"ID": 100301,
"FOPDNLNNHDJ": 1003,
"DIIDBBGLDOL": "HollowGroupNameText_Story",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Story.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M.prefab",
"LDKNDDHOHND": "FF9500FF",
"EEBAIANJMEC": "FF9500FF|FFDE0000",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_01"
},
{
"ID": 100302,
"FOPDNLNNHDJ": 1003,
"DIIDBBGLDOL": "HollowGroupNameText_exploration",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Explore.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M02.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips03.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_03"
},
{
"ID": 100303,
"FOPDNLNNHDJ": 1003,
"DIIDBBGLDOL": "HollowGroupNameText_combat",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Combat.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_S.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips02.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_02"
},
{
"ID": 100401,
"FOPDNLNNHDJ": 1004,
"DIIDBBGLDOL": "HollowGroupNameText_BigWorld",
"EFPBDDJIJBO": "1100140008",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_HighRisk.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_L.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": false,
"FNIGJDFMHBA": "",
"BECFHCOGPKG": ""
},
{
"ID": 100501,
"FOPDNLNNHDJ": 1005,
"DIIDBBGLDOL": "HollowGroupNameText_Story",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Story.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M.prefab",
"LDKNDDHOHND": "FF9500FF",
"EEBAIANJMEC": "FF9500FF|FFDE0000",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_01"
},
{
"ID": 100502,
"FOPDNLNNHDJ": 1005,
"DIIDBBGLDOL": "HollowGroupNameText_exploration",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Explore.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M02.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips03.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_03"
},
{
"ID": 100503,
"FOPDNLNNHDJ": 1005,
"DIIDBBGLDOL": "HollowGroupNameText_combat",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Combat.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_S.prefab",
"LDKNDDHOHND": "00A1FFFF",
"EEBAIANJMEC": "00A1FFFF|00FFD300",
"EKMLECIKMID": true,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips02.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_02"
},
{
"ID": 109901,
"FOPDNLNNHDJ": 1099,
"DIIDBBGLDOL": "HollowGroupNameText_Story",
"EFPBDDJIJBO": "",
"OCBLGHECPLH": "Hollow_LockedHint_01",
"BEIEFNLAJCH": "UI/Sprite/A1DynamicLoad/YorozuyaPage/UnPacker/Icon_Story.png",
"CCFBKFKFJGM": "UI/3D/Yorozuya/Yorozuya_Hollow_Sphere_M.prefab",
"LDKNDDHOHND": "FF9500FF",
"EEBAIANJMEC": "FF9500FF|FFDE0000",
"EKMLECIKMID": false,
"FNIGJDFMHBA": "UI/Menus/Widget/Yorozuya/Icon_MapTips.prefab",
"BECFHCOGPKG": "YorozuyaMapTipsUnLockChange_01"
}
]

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,882 @@
[
{
"AreaID": 500000101,
"BattleEventID": 5000001,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000001_1.asset",
"MDMOGIDKCLG": "metro4_2",
"LLPNKBBJHKL": "PlayerPos_E2",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000102,
"BattleEventID": 5000001,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000001_2.asset",
"MDMOGIDKCLG": "metro4_2",
"LLPNKBBJHKL": "PlayerPos_E1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000103,
"BattleEventID": 5000001,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000001_3.asset",
"MDMOGIDKCLG": "metro4_2",
"LLPNKBBJHKL": "PlayerPos_E1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000201,
"BattleEventID": 5000002,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000002_1.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_B5",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000202,
"BattleEventID": 5000002,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000002_2.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000203,
"BattleEventID": 5000002,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000002_3.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000301,
"BattleEventID": 5000003,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000003_1.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_3_1",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000302,
"BattleEventID": 5000003,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000003_2.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_3_1",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000303,
"BattleEventID": 5000003,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000003_3.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_3_1",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000401,
"BattleEventID": 5000004,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000004_1.asset",
"MDMOGIDKCLG": "Stage_Zero_SpecialRoom_5",
"LLPNKBBJHKL": "PlayerPos_E1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000402,
"BattleEventID": 5000004,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000004_2.asset",
"MDMOGIDKCLG": "Stage_Zero_SpecialRoom_5",
"LLPNKBBJHKL": "PlayerPos_SP",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 500000403,
"BattleEventID": 5000004,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5000004_3.asset",
"MDMOGIDKCLG": "Stage_Zero_SpecialRoom_5",
"LLPNKBBJHKL": "PlayerPos_SP",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501010101,
"BattleEventID": 5010101,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010101_1.asset",
"MDMOGIDKCLG": "metro4_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501010102,
"BattleEventID": 5010101,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010101_2.asset",
"MDMOGIDKCLG": "metro4_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint2",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501010103,
"BattleEventID": 5010101,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010101_3.asset",
"MDMOGIDKCLG": "metro4_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint3",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501010104,
"BattleEventID": 5010101,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010101_4.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_22",
"LLPNKBBJHKL": "SpecialPlayerPos_1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501010105,
"BattleEventID": 5010101,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010101_5.asset",
"MDMOGIDKCLG": "metro4_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint5",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501011101,
"BattleEventID": 5010111,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010111_1.asset",
"MDMOGIDKCLG": "metro4_2_Rally",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Rain",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501011102,
"BattleEventID": 5010111,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010111_2.asset",
"MDMOGIDKCLG": "metro4_2_Rally",
"LLPNKBBJHKL": "RallyPlayerPos_C1",
"TimePeriod": "Night",
"Weather": "Rain",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501011103,
"BattleEventID": 5010111,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010111_3.asset",
"MDMOGIDKCLG": "metro4_2_Rally",
"LLPNKBBJHKL": "RallyPlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Rain",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501011104,
"BattleEventID": 5010111,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010111_4.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_22",
"LLPNKBBJHKL": "SpecialPlayerPos_1",
"TimePeriod": "Morning",
"Weather": "Rain",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501011105,
"BattleEventID": 5010111,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010111_5.asset",
"MDMOGIDKCLG": "metro4_2_Rally",
"LLPNKBBJHKL": "PlayerPos_F2",
"TimePeriod": "Night",
"Weather": "Rain",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501012101,
"BattleEventID": 5010121,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010121_1.asset",
"MDMOGIDKCLG": "metro4_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint6",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501012102,
"BattleEventID": 5010121,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010121_2.asset",
"MDMOGIDKCLG": "metro4_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint7",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501012103,
"BattleEventID": 5010121,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010121_3.asset",
"MDMOGIDKCLG": "metro4_2_Rally",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501012104,
"BattleEventID": 5010121,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010121_4.asset",
"MDMOGIDKCLG": "metro4_2_Rally",
"LLPNKBBJHKL": "PlayerPos_E2",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020200,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_0.asset",
"MDMOGIDKCLG": "Stage_VR_TrainingRoom_30R",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020201,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_1.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint1",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020202,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_2.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint2",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020203,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_3.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint3",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020204,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_4.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint4",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020205,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_5.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint5",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020206,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_6.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_25_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint6",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020207,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_7.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint7",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020208,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_6.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_25_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint6",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501020209,
"BattleEventID": 5010201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010201_9.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021101,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_1.asset",
"MDMOGIDKCLG": "Construction2_5_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint1",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021102,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_2.asset",
"MDMOGIDKCLG": "Construction2_5_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint2",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021103,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_3.asset",
"MDMOGIDKCLG": "Construction2_5_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint3",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021104,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_4.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_12_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint4",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021105,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_5.asset",
"MDMOGIDKCLG": "Construction2_5_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint5",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021106,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_6.asset",
"MDMOGIDKCLG": "Construction2_5_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint6",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021107,
"BattleEventID": 5010211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010211_7.asset",
"MDMOGIDKCLG": "Construction2_5_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint3",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021301,
"BattleEventID": 5010213,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010213_1.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_B5",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021302,
"BattleEventID": 5010213,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010213_2.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021303,
"BattleEventID": 5010213,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010213_3.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501021304,
"BattleEventID": 5010213,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010213_4.asset",
"MDMOGIDKCLG": "Construction2_3_Boss",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "Thunder",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501022101,
"BattleEventID": 5010221,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010221_1.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_CheckPoint9",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501022102,
"BattleEventID": 5010221,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010221_2.asset",
"MDMOGIDKCLG": "Construction3_4_SuccessiveLevel",
"LLPNKBBJHKL": "PlayerPos_C2",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501022103,
"BattleEventID": 5010221,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010221_3.asset",
"MDMOGIDKCLG": "Construction2_3_Zero",
"LLPNKBBJHKL": "PlayerPos_E4_Rally",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501022104,
"BattleEventID": 5010221,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010221_4.asset",
"MDMOGIDKCLG": "Construction2_3_Zero",
"LLPNKBBJHKL": "PlayerPos_D4_Rally",
"TimePeriod": "Evening",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030101,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_1.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_3_Successive",
"LLPNKBBJHKL": "SpecialPlayerPos_B1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030102,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_2.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_2_1_Successive",
"LLPNKBBJHKL": "PlayerPos_CheckPoint1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030103,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_3.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_2_1_Successive",
"LLPNKBBJHKL": "PlayerPos_CheckPoint2",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030104,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_4.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_2_1_Successive",
"LLPNKBBJHKL": "PlayerPos_CheckPoint3",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030105,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_5.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_2_1_Successive",
"LLPNKBBJHKL": "PlayerPos_CheckPoint4",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030106,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_6.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_15_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPointSideQuest1",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501030107,
"BattleEventID": 5010301,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010301_7.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_2_1_Successive",
"LLPNKBBJHKL": "SpecialRallyPos_7",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031101,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_1.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031102,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_2.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint2",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031103,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_3.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint3",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031104,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_4.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint4",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031105,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_5.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint5",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031106,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_6.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint6",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031107,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_7.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint7",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031108,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_8.asset",
"MDMOGIDKCLG": "Stage_Zero_ComplexRoom_15_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint8",
"TimePeriod": "Morning",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031109,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_9.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint9",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031110,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_10.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_1_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint10",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031111,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_11.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_2_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint11",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501031112,
"BattleEventID": 5010311,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010311_12.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_1_Rally",
"LLPNKBBJHKL": "PlayerPos_CheckPoint12",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 501032101,
"BattleEventID": 5010321,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010321_1.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_2_Zero",
"LLPNKBBJHKL": "PlayerPos_A5_Rally",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501032102,
"BattleEventID": 5010321,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010321_2.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_2_Zero",
"LLPNKBBJHKL": "PlayerPos_A6_Rally",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501032103,
"BattleEventID": 5010321,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010321_3.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_2_Zero",
"LLPNKBBJHKL": "PlayerPos_C5_Rally",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 501032104,
"BattleEventID": 5010321,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5010321_4.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_H_1_1_Rally",
"LLPNKBBJHKL": "PlayerPos_A1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": true,
"MBIMPLIHABC": ""
},
{
"AreaID": 503020101,
"BattleEventID": 5030201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5030201_1.asset",
"MDMOGIDKCLG": "Stage_MetroArea_4_1_Lycaon",
"LLPNKBBJHKL": "PlayerPos_Ly1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 503020102,
"BattleEventID": 5030201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5030201_2.asset",
"MDMOGIDKCLG": "Stage_MetroArea_4_1_Lycaon",
"LLPNKBBJHKL": "PlayerPos_Ly2",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 503020103,
"BattleEventID": 5030201,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5030201_3.asset",
"MDMOGIDKCLG": "Stage_MetroArea_4_1_Lycaon",
"LLPNKBBJHKL": "PlayerPos_Ly3",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 503021101,
"BattleEventID": 5030211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5030211_1.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_2_Lycaon",
"LLPNKBBJHKL": "PlayerPos_Ly1",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 503021102,
"BattleEventID": 5030211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5030211_2.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_2_Lycaon",
"LLPNKBBJHKL": "PlayerPos_Ly2",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
},
{
"AreaID": 503021103,
"BattleEventID": 5030211,
"NELIKCGAKEJ": "Level/FC_Main/FC_Successive/FC_5030211_3.asset",
"MDMOGIDKCLG": "Stage_SkyScraper_L_1_2_Lycaon",
"LLPNKBBJHKL": "PlayerPos_Ly3",
"TimePeriod": "Night",
"Weather": "SunShine",
"HAIGBCBDJPL": false,
"MBIMPLIHABC": ""
}
]

View file

@ -0,0 +1,604 @@
[
{
"ID": 500000101,
"BattleEventID": 5000001,
"VariableName": "IsArea1Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000102,
"BattleEventID": 5000001,
"VariableName": "IsArea2Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000103,
"BattleEventID": 5000001,
"VariableName": "IsArea3Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000104,
"BattleEventID": 5000001,
"VariableName": "IsArea4Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000105,
"BattleEventID": 5000001,
"VariableName": "IsArea5Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000106,
"BattleEventID": 5000001,
"VariableName": "IsArea6Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000107,
"BattleEventID": 5000001,
"VariableName": "SideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000108,
"BattleEventID": 5000001,
"VariableName": "SecondSideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000109,
"BattleEventID": 5000001,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 500000201,
"BattleEventID": 5000002,
"VariableName": "whichAreaIn",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 500000202,
"BattleEventID": 5000002,
"VariableName": "IsArea2Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000203,
"BattleEventID": 5000002,
"VariableName": "IsArea3Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000204,
"BattleEventID": 5000002,
"VariableName": "IsArea4Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000205,
"BattleEventID": 5000002,
"VariableName": "IsArea5Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 500000206,
"BattleEventID": 5000002,
"VariableName": "SecretMission",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 500000207,
"BattleEventID": 5000002,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 500000301,
"BattleEventID": 5000003,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 500000401,
"BattleEventID": 5000004,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501010100,
"BattleEventID": 5010101,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501010101,
"BattleEventID": 5010101,
"VariableName": "SideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501010102,
"BattleEventID": 5010101,
"VariableName": "IsSideQuestFinsih",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501010103,
"BattleEventID": 5010101,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501010104,
"BattleEventID": 5010101,
"VariableName": "IsSideQuestRestart",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501011101,
"BattleEventID": 5010111,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501011102,
"BattleEventID": 5010111,
"VariableName": "SideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501011103,
"BattleEventID": 5010111,
"VariableName": "IsSideQuestFinsih",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501011104,
"BattleEventID": 5010111,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501011105,
"BattleEventID": 5010111,
"VariableName": "GroundSideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501011106,
"BattleEventID": 5010111,
"VariableName": "IsSideQuestRestart",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501012101,
"BattleEventID": 5010121,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "4"
},
{
"ID": 501012102,
"BattleEventID": 5010121,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501020200,
"BattleEventID": 5010201,
"VariableName": "IsEnterTeachLevel",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020201,
"BattleEventID": 5010201,
"VariableName": "IsArea1Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020202,
"BattleEventID": 5010201,
"VariableName": "IsArea2Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020203,
"BattleEventID": 5010201,
"VariableName": "IsArea3Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020204,
"BattleEventID": 5010201,
"VariableName": "IsArea4Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020205,
"BattleEventID": 5010201,
"VariableName": "IsArea5Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020206,
"BattleEventID": 5010201,
"VariableName": "IsArea6Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020207,
"BattleEventID": 5010201,
"VariableName": "IsArea7Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020208,
"BattleEventID": 5010201,
"VariableName": "SideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020209,
"BattleEventID": 5010201,
"VariableName": "IsArea8Finish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020210,
"BattleEventID": 5010201,
"VariableName": "SecondSideQuest",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020211,
"BattleEventID": 5010201,
"VariableName": "StartSecondPhase",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020212,
"BattleEventID": 5010201,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501020213,
"BattleEventID": 5010201,
"VariableName": "IsSideQuestRestart",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020214,
"BattleEventID": 5010201,
"VariableName": "IsSideQuestFinsih",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501020215,
"BattleEventID": 5010201,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501020216,
"BattleEventID": 5010201,
"VariableName": "LifeCoinGet",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501021101,
"BattleEventID": 5010211,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501021102,
"BattleEventID": 5010211,
"VariableName": "IsSideQuestRestart",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501021103,
"BattleEventID": 5010211,
"VariableName": "IsSideQuestFinsih",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501021104,
"BattleEventID": 5010211,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501021105,
"BattleEventID": 5010211,
"VariableName": "BossHealth",
"ValueType": "float",
"InitialValue": "1"
},
{
"ID": 501021106,
"BattleEventID": 5010211,
"VariableName": "CargoCartStopped",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501021107,
"BattleEventID": 5010211,
"VariableName": "IsLastAreaFinish",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501021301,
"BattleEventID": 5010213,
"VariableName": "whichAreaIn",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501022101,
"BattleEventID": 5010221,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "4"
},
{
"ID": 501022102,
"BattleEventID": 5010221,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030101,
"BattleEventID": 5010301,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501030102,
"BattleEventID": 5010301,
"VariableName": "IsSideQuestFinsih",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501030103,
"BattleEventID": 5010301,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030104,
"BattleEventID": 5010301,
"VariableName": "DoorStatus1",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030105,
"BattleEventID": 5010301,
"VariableName": "DoorStatus2",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030106,
"BattleEventID": 5010301,
"VariableName": "DoorStatus3",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030107,
"BattleEventID": 5010301,
"VariableName": "DoorStatus4",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030108,
"BattleEventID": 5010301,
"VariableName": "DoorStatus5",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501030109,
"BattleEventID": 5010301,
"VariableName": "IsSideQuestRestart",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501030110,
"BattleEventID": 5010301,
"VariableName": "IsTrickFinish",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031101,
"BattleEventID": 5010311,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 501031102,
"BattleEventID": 5010311,
"VariableName": "IsSideQuestFinsih",
"ValueType": "bool",
"InitialValue": "false"
},
{
"ID": 501031103,
"BattleEventID": 5010311,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031104,
"BattleEventID": 5010311,
"VariableName": "IsAllyRescued",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501031105,
"BattleEventID": 5010311,
"VariableName": "IsShortcutOpened",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501031106,
"BattleEventID": 5010311,
"VariableName": "IsGuardDefeated",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501031107,
"BattleEventID": 5010311,
"VariableName": "DoorStatus1",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031108,
"BattleEventID": 5010311,
"VariableName": "DoorStatus2",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031109,
"BattleEventID": 5010311,
"VariableName": "DoorStatus3",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031110,
"BattleEventID": 5010311,
"VariableName": "DoorStatus4",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031111,
"BattleEventID": 5010311,
"VariableName": "DoorStatus5",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 501031112,
"BattleEventID": 5010311,
"VariableName": "IsAllyImposterCatched",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501031113,
"BattleEventID": 5010311,
"VariableName": "IsSideQuestRestart",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501031114,
"BattleEventID": 5010311,
"VariableName": "LifeCoinGet",
"ValueType": "bool",
"InitialValue": "FALSE"
},
{
"ID": 501032101,
"BattleEventID": 5010321,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "4"
},
{
"ID": 501032102,
"BattleEventID": 5010321,
"VariableName": "RevivedTime",
"ValueType": "int",
"InitialValue": "0"
},
{
"ID": 503020101,
"BattleEventID": 5030201,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
},
{
"ID": 503021101,
"BattleEventID": 5030211,
"VariableName": "AreaSelect",
"ValueType": "int",
"InitialValue": "1"
}
]

View file

@ -1,5 +1,7 @@
use serde::Deserialize; use serde::Deserialize;
use super::BattleEventConfigID;
template_id!(ArchiveBattleQuest u32 id); template_id!(ArchiveBattleQuest u32 id);
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
@ -19,7 +21,7 @@ pub struct ArchiveBattleQuestTemplate {
#[serde(rename = "FirstBattleEventID")] #[serde(rename = "FirstBattleEventID")]
pub first_battle_event_id: u32, pub first_battle_event_id: u32,
#[serde(rename = "BattleEventID")] #[serde(rename = "BattleEventID")]
pub battle_event_id: u32, pub battle_event_id: BattleEventConfigID,
pub battle_rank: String, pub battle_rank: String,
pub slot1_avatar: i32, pub slot1_avatar: i32,
pub slot2_avatar: i32, pub slot2_avatar: i32,

View file

@ -0,0 +1,16 @@
use serde::Deserialize;
use super::OnceRewardID;
template_id!(BattleEventConfig u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct BattleEventConfigTemplate {
#[serde(rename = "ID")]
pub id: BattleEventConfigID,
#[serde(rename = "LevelDesignID")]
pub level_design_id: u32,
pub normal_drop: String,
pub special_drop: Vec<OnceRewardID>,
}

View file

@ -0,0 +1,16 @@
use serde::Deserialize;
use super::BattleEventConfigID;
template_id!(BattleGroupConfig u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct BattleGroupConfigTemplate {
#[serde(rename = "ID")]
pub id: BattleGroupConfigID,
#[serde(rename = "QuestID")]
pub quest_id: u32,
#[serde(rename = "BattleEventID")]
pub battle_event_id: BattleEventConfigID,
}

View file

@ -0,0 +1,10 @@
use serde::Deserialize;
template_id!(HollowConfig u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct HollowConfigTemplate {
#[serde(rename = "ID")]
pub id: HollowConfigID,
}

View file

@ -0,0 +1,13 @@
use serde::Deserialize;
template_id!(HollowQuest u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct HollowQuestTemplate {
#[serde(rename = "ID")]
pub id: HollowQuestID,
#[serde(rename = "ChessBoardID")]
pub chess_board_id: u32,
pub hollow_quest_type: u32,
}

View file

@ -87,4 +87,11 @@ template_tables! {
MainCityBgmConfigTemplate; MainCityBgmConfigTemplate;
ArchiveFileQuestTemplate; ArchiveFileQuestTemplate;
ArchiveBattleQuestTemplate; ArchiveBattleQuestTemplate;
HollowQuestTemplate;
HollowConfigTemplate;
BattleEventConfigTemplate;
BattleGroupConfigTemplate;
SubAreaDataTemplate;
VariableDataTemplate;
OnceRewardTemplate;
} }

View file

@ -0,0 +1,19 @@
use serde::Deserialize;
template_id!(OnceReward u32 reward_id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct OnceRewardTemplate {
#[serde(rename = "RewardID")]
pub reward_id: OnceRewardID,
pub reward_list: Vec<RewardItem>,
}
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct RewardItem {
#[serde(rename = "RewardItemID")]
pub reward_item_id: u32,
pub reward_amount: u32,
}

View file

@ -0,0 +1,16 @@
use std::u32;
use serde::Deserialize;
template_id!(SubAreaData u32 area_id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct SubAreaDataTemplate {
#[serde(rename = "AreaID")]
pub area_id: SubAreaDataID,
#[serde(rename = "BattleEventID")]
pub battle_event_id: u32,
pub time_period: String,
pub weather: String,
}

View file

@ -1,5 +1,7 @@
use serde::Deserialize; use serde::Deserialize;
use super::BattleEventConfigID;
template_id!(TrainingQuest u32 id); template_id!(TrainingQuest u32 id);
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
@ -7,5 +9,5 @@ template_id!(TrainingQuest u32 id);
pub struct TrainingQuestTemplate { pub struct TrainingQuestTemplate {
pub id: TrainingQuestID, pub id: TrainingQuestID,
pub training_type: u32, pub training_type: u32,
pub battle_event_id: u32, pub battle_event_id: BattleEventConfigID,
} }

View file

@ -0,0 +1,25 @@
use std::u32;
use serde::Deserialize;
template_id!(VariableData u32 id);
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct VariableDataTemplate {
#[serde(rename = "ID")]
pub id: VariableDataID,
#[serde(rename = "BattleEventID")]
pub battle_event_id: u32,
pub variable_name: String,
pub value_type: VariableValueType,
pub initial_value: String,
}
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum VariableValueType {
Int,
Bool,
Float,
}

View file

@ -98,7 +98,10 @@ req_handlers! {
world::LeaveCurDungeon; world::LeaveCurDungeon;
world::InteractWithUnit; world::InteractWithUnit;
world::EnterSection; world::EnterSection;
world::ArchiveQuestsSeen; world::JumpPageSystem;
world::StartHollowQuest;
world::FinishHollowBattleEvent;
world::LongFightProgressUpdate;
client_systems::ReportUiLayoutPlatform; client_systems::ReportUiLayoutPlatform;
client_systems::PlayerOperation; client_systems::PlayerOperation;
client_systems::UnlockNewbieGroup; client_systems::UnlockNewbieGroup;

View file

@ -16,13 +16,22 @@ pub async fn on_get_quest_data(
retcode: Retcode::RetSucc.into(), retcode: Retcode::RetSucc.into(),
quest_type: req.quest_type, quest_type: req.quest_type,
quest_data: Some(QuestData { quest_data: Some(QuestData {
quest_collection_list: vec![QuestCollection { quest_collection_list: vec![
quest_type: EQuestType::ArchiveFile as u32, QuestCollection {
quest_id_list: tables::archive_file_quest_template_tb::iter() quest_type: EQuestType::ArchiveFile as u32,
.map(|tmpl| tmpl.id.value()) quest_id_list: tables::archive_file_quest_template_tb::iter()
.collect(), .map(|tmpl| tmpl.id.value())
..Default::default() .collect(),
}], ..Default::default()
},
QuestCollection {
quest_type: EQuestType::Hollow as u32,
quest_id_list: tables::hollow_quest_template_tb::iter()
.map(|tmpl| tmpl.id.value())
.collect(),
..Default::default()
},
],
}), }),
}) })
} }
@ -35,22 +44,19 @@ pub async fn on_get_yorozuya_info(
Ok(GetYorozuyaInfoScRsp { Ok(GetYorozuyaInfoScRsp {
retcode: Retcode::RetSucc.into(), retcode: Retcode::RetSucc.into(),
yorozuya_info: Some(YorozuyaInfo { yorozuya_info: Some(YorozuyaInfo {
odohdljfdlf: vec![1001], odohdljfdlf: vec![1000, 1001, 1002, 1003, 1004],
apmojjlcooa: vec![1001], apmojjlcooa: vec![1000, 1001, 1002, 1003, 1004],
npgjhahijkb: vec![100001, 100101, 100401, 109901], akiddbalfoa: vec![10010001, 10010002, 10010004],
eoljpdnjgeg: vec![ npgjhahijkb: tables::hollow_config_template_tb::iter()
Ofhlkjeakif { .map(|tmpl| tmpl.id.value())
nnkcanmllod: 199030, .collect(),
eoljpdnjgeg: tables::hollow_quest_template_tb::iter()
.map(|tmpl| Ofhlkjeakif {
nnkcanmllod: tmpl.id.value(),
kkjlnkehddj: Some(Cgpajijemlj::default()), kkjlnkehddj: Some(Cgpajijemlj::default()),
..Default::default() ..Default::default()
}, })
Ofhlkjeakif { .collect(),
nnkcanmllod: 199035,
ggnbpiofdpp: 110103,
kkjlnkehddj: Some(Cgpajijemlj::default()),
..Default::default()
},
],
..Default::default() ..Default::default()
}), }),
}) })

View file

@ -1,12 +1,14 @@
use data::{ use data::{
event, event,
tables::{ProcedureConfigID, SectionConfigID, TrainingQuestID}, tables::{HollowQuestID, ProcedureConfigID, SectionConfigID, TrainingQuestID},
}; };
use super::core::NetError; use super::core::NetError;
use crate::{ use crate::{
logic::{game::*, procedure::ProcedureAction, ELocalPlayType, ENPCInteraction}, logic::{
game::*, procedure::ProcedureAction, EHollowQuestType, ELocalPlayType, ENPCInteraction,
},
net::NetSessionState, net::NetSessionState,
}; };
@ -128,7 +130,7 @@ pub async fn on_beginner_battle_rebegin(
pub async fn on_sync_hall_event( pub async fn on_sync_hall_event(
_session: &NetSession, _session: &NetSession,
_player: &mut Player, _player: &mut Player,
_req: SyncHallEventCsReq, req: SyncHallEventCsReq,
) -> NetResult<SyncHallEventScRsp> { ) -> NetResult<SyncHallEventScRsp> {
Ok(SyncHallEventScRsp { Ok(SyncHallEventScRsp {
retcode: Retcode::RetSucc.into(), retcode: Retcode::RetSucc.into(),
@ -182,10 +184,42 @@ pub async fn on_start_trial_fighting_mission(
} }
pub async fn on_end_battle( pub async fn on_end_battle(
_session: &NetSession, session: &NetSession,
_player: &mut Player, player: &mut Player,
_req: EndBattleCsReq, req: EndBattleCsReq,
) -> NetResult<EndBattleScRsp> { ) -> NetResult<EndBattleScRsp> {
match &mut player.game_instance {
GameInstance::Hollow(hollow) if hollow.quest_manager.has_active_quests() => {
hollow
.quest_manager
.finish_quest(hollow.battle_event_id.value())
.map_err(LogicError::from)?;
session
.notify(DungeonQuestFinishedScNotify {
result: req.battle_result.unwrap().result as u32,
quest_id: hollow.quest_id,
..Default::default()
})
.await?;
}
GameInstance::LongFight(fight) => {
fight
.quest_manager
.finish_quest(fight.battle_event_id.value())
.map_err(LogicError::from)?;
session
.notify(DungeonQuestFinishedScNotify {
result: req.battle_result.unwrap().result as u32,
quest_id: fight.quest_id,
..Default::default()
})
.await?;
}
_ => (),
};
Ok(EndBattleScRsp { Ok(EndBattleScRsp {
battle_reward: Some(BattleRewardInfo::default()), battle_reward: Some(BattleRewardInfo::default()),
retcode: Retcode::RetSucc.into(), retcode: Retcode::RetSucc.into(),
@ -259,13 +293,79 @@ pub async fn on_enter_section(
}) })
} }
pub async fn on_archive_quests_seen( pub async fn on_jump_page_system(
_session: &NetSession, _session: &NetSession,
_player: &mut Player, _player: &mut Player,
_req: ArchiveQuestsSeenCsReq, _req: JumpPageSystemCsReq,
) -> NetResult<ArchiveQuestsSeenScRsp> { ) -> NetResult<JumpPageSystemScRsp> {
Ok(ArchiveQuestsSeenScRsp { Ok(JumpPageSystemScRsp {
retcode: Retcode::RetSucc.into(), retcode: Retcode::RetSucc.into(),
..Default::default() ..Default::default()
}) })
} }
pub async fn on_start_hollow_quest(
session: &NetSession,
player: &mut Player,
req: StartHollowQuestCsReq,
) -> NetResult<StartHollowQuestScRsp> {
use crate::logic::{TimePeriodType, WeatherType};
let quest_id = HollowQuestID::new(req.quest_id).ok_or(Retcode::RetFail)?;
let quest_type = EHollowQuestType::from(quest_id.template().hollow_quest_type);
match quest_type {
EHollowQuestType::RallyBattle => {
player.game_instance = GameInstance::LongFight(
LongFightGame::create_rally_game(
quest_id,
&req.avatars,
req.buddy_id,
TimePeriodType::from_str(&req.quest_time_period),
WeatherType::from_str(&req.quest_weather),
)
.map_err(LogicError::from)?,
)
}
_ => {
player.game_instance = GameInstance::Hollow(
HollowGame::create_pure_hollow_battle(
quest_id,
&req.avatars,
req.buddy_id,
TimePeriodType::from_str(&req.quest_time_period),
WeatherType::from_str(&req.quest_weather),
)
.map_err(LogicError::from)?,
)
}
}
let world_init_notify = player.game_instance.create_world_init_notify()?;
session.notify(world_init_notify).await?;
Ok(StartHollowQuestScRsp {
retcode: Retcode::RetSucc.into(),
quest_id: 0,
})
}
pub async fn on_finish_hollow_battle_event(
_session: &NetSession,
_player: &mut Player,
_req: FinishHollowBattleEventCsReq,
) -> NetResult<FinishHollowBattleEventScRsp> {
Ok(FinishHollowBattleEventScRsp {
retcode: Retcode::RetSucc.into(),
})
}
pub async fn on_long_fight_progress_update(
_session: &NetSession,
_player: &mut Player,
_req: LongFightProgressUpdateCsReq,
) -> NetResult<LongFightProgressUpdateScRsp> {
Ok(LongFightProgressUpdateScRsp {
retcode: Retcode::RetSucc.into(),
})
}

View file

@ -0,0 +1,67 @@
use std::collections::HashMap;
use data::tables::{BattleEventConfigID, OnceRewardID};
use proto::{FightDropInfo, FightReward, RewardItems};
pub struct FightDropPool {
special_drop: Vec<SpecialReward>,
}
pub struct SpecialReward {
pub reward_id: OnceRewardID,
pub item_count_map: HashMap<u32, u32>,
}
impl FightDropPool {
pub fn new(battle_event_id: BattleEventConfigID) -> Self {
let template = battle_event_id.template();
Self {
special_drop: template
.special_drop
.iter()
.map(|id| SpecialReward::new(*id))
.collect(),
}
}
pub fn to_client(&self) -> FightDropInfo {
FightDropInfo {
normal_drop_list: Vec::new(),
special_drop_list: self
.special_drop
.iter()
.map(SpecialReward::to_client)
.collect(),
..Default::default()
}
}
}
impl SpecialReward {
pub fn new(template_id: OnceRewardID) -> Self {
let template = template_id.template();
Self {
reward_id: template_id,
item_count_map: template
.reward_list
.iter()
.map(|r| (r.reward_item_id, r.reward_amount))
.collect(),
}
}
pub fn to_client(&self) -> FightReward {
FightReward {
reward_id: self.reward_id.value(),
fight_reward_map: HashMap::from([(
0,
RewardItems {
reward_item_map: self.item_count_map.clone(),
},
)]),
..Default::default()
}
}
}

View file

@ -0,0 +1,2 @@
mod fight_drop;
pub use fight_drop::FightDropPool;

View file

@ -1,7 +1,9 @@
mod avatar; pub mod drop;
mod buddy; mod quest;
mod team; mod team;
pub mod unit;
mod variable;
pub use avatar::InLevelAvatarDataItem; pub use quest::{DungeonQuestError, DungeonQuestManager};
pub use buddy::EquippedBuddyDataItem; pub use team::{BuddyParam, TeamDataItem};
pub use team::TeamDataItem; pub use variable::LogicVariableTable;

View file

@ -0,0 +1,44 @@
use data::tables::BattleGroupConfigID;
use proto::DungeonQuestInfo;
use thiserror::Error;
#[derive(Default)]
pub struct DungeonQuestManager {
inner_quests: Vec<u32>,
}
#[derive(Error, Debug)]
pub enum DungeonQuestError {
#[error("dungeon inner quest with id {0} is not active")]
QuestNotActive(u32),
}
impl DungeonQuestManager {
pub fn new_for_battle_group(battle_group_id: BattleGroupConfigID) -> Self {
Self {
inner_quests: vec![battle_group_id.template().battle_event_id.value()],
}
}
pub fn finish_quest(&mut self, quest_id: u32) -> Result<(), DungeonQuestError> {
let idx = self
.inner_quests
.iter()
.position(|id| *id == quest_id)
.ok_or(DungeonQuestError::QuestNotActive(quest_id))?;
self.inner_quests.remove(idx);
Ok(())
}
pub fn has_active_quests(&self) -> bool {
!self.inner_quests.is_empty()
}
pub fn to_client(&self) -> DungeonQuestInfo {
DungeonQuestInfo {
inner_quest_id_list: self.inner_quests.clone(),
..Default::default()
}
}
}

View file

@ -2,30 +2,33 @@ use std::collections::HashMap;
use crate::logic::BuddyTeamType; use crate::logic::BuddyTeamType;
use super::{EquippedBuddyDataItem, InLevelAvatarDataItem}; use super::unit::{AvatarUnit, BuddyUnit};
pub struct TeamDataItem { pub struct TeamDataItem {
pub avatar_member_list: Vec<InLevelAvatarDataItem>, pub avatar_member_list: Vec<AvatarUnit>,
pub equipped_buddy_list: Vec<EquippedBuddyDataItem>, pub equipped_buddy_list: Vec<BuddyUnit>,
} }
pub struct BuddyParam(pub u32, pub BuddyTeamType);
impl TeamDataItem { impl TeamDataItem {
pub fn new(avatars: &[u32], buddy_id: u32) -> Self { pub fn new(avatars: &[u32], buddy_params: &[BuddyParam]) -> Self {
Self { Self {
avatar_member_list: avatars avatar_member_list: avatars
.iter() .iter()
.map(|id| InLevelAvatarDataItem { .map(|id| AvatarUnit {
avatar_id: *id, avatar_id: *id,
mp_property_override: HashMap::new(), mp_property_override: HashMap::new(),
}) })
.collect(), .collect(),
equipped_buddy_list: (buddy_id != 0) equipped_buddy_list: buddy_params
.then_some(vec![EquippedBuddyDataItem { .iter()
buddy_id, .map(|param| BuddyUnit {
buddy_team: BuddyTeamType::Assisting, buddy_id: param.0,
buddy_team: param.1,
override_property_map: HashMap::new(), override_property_map: HashMap::new(),
}]) })
.unwrap_or_default(), .collect(),
} }
} }
} }

View file

@ -1,16 +1,16 @@
use std::collections::HashMap; use std::collections::HashMap;
use crate::logic::BaseProperty; use crate::logic::BaseProperty;
use proto::InLevelAvatarData; use proto::AvatarUnitInfo;
pub struct InLevelAvatarDataItem { pub struct AvatarUnit {
pub avatar_id: u32, pub avatar_id: u32,
pub mp_property_override: HashMap<BaseProperty, i32>, pub mp_property_override: HashMap<BaseProperty, i32>,
} }
impl InLevelAvatarDataItem { impl AvatarUnit {
pub fn to_client(&self) -> InLevelAvatarData { pub fn to_client(&self) -> AvatarUnitInfo {
InLevelAvatarData { AvatarUnitInfo {
avatar_id: self.avatar_id, avatar_id: self.avatar_id,
mp_property_override_map: self mp_property_override_map: self
.mp_property_override .mp_property_override

View file

@ -1,18 +1,18 @@
use std::collections::HashMap; use std::collections::HashMap;
use proto::EquippedBuddyData; use proto::BuddyUnitInfo;
use crate::logic::{BaseProperty, BuddyTeamType}; use crate::logic::{BaseProperty, BuddyTeamType};
pub struct EquippedBuddyDataItem { pub struct BuddyUnit {
pub buddy_id: u32, pub buddy_id: u32,
pub buddy_team: BuddyTeamType, pub buddy_team: BuddyTeamType,
pub override_property_map: HashMap<BaseProperty, i32>, pub override_property_map: HashMap<BaseProperty, i32>,
} }
impl EquippedBuddyDataItem { impl BuddyUnit {
pub fn to_client(&self) -> EquippedBuddyData { pub fn to_client(&self) -> BuddyUnitInfo {
EquippedBuddyData { BuddyUnitInfo {
buddy_id: self.buddy_id, buddy_id: self.buddy_id,
r#type: self.buddy_team.to_protocol().into(), r#type: self.buddy_team.to_protocol().into(),
mp_property_override_map: self mp_property_override_map: self

View file

@ -0,0 +1,5 @@
mod avatar;
mod buddy;
pub use avatar::AvatarUnit;
pub use buddy::BuddyUnit;

View file

@ -0,0 +1,74 @@
use std::collections::HashMap;
use data::tables::{self, BattleEventConfigID, VariableDataID, VariableValueType};
use proto::FightVariable;
pub struct LogicVariableTable {
variable_map: HashMap<String, LogicVariable>,
}
impl LogicVariableTable {
pub fn new(battle_event_id: BattleEventConfigID) -> Self {
let event_id = battle_event_id.value();
Self {
variable_map: tables::variable_data_template_tb::iter()
.filter(|tmpl| tmpl.battle_event_id == event_id)
.map(|tmpl| (tmpl.variable_name.clone(), LogicVariable::new(tmpl.id)))
.collect(),
}
}
pub fn to_client(&self) -> HashMap<String, FightVariable> {
self.variable_map
.iter()
.map(|(name, var)| (name.clone(), var.to_client()))
.collect()
}
}
pub enum LogicVariable {
Int(i64),
Float(f64),
Bool(bool),
}
impl LogicVariable {
pub fn new(id: VariableDataID) -> Self {
let template = id.template();
match template.value_type {
VariableValueType::Int => Self::Int(template.initial_value.parse().unwrap_or_default()),
VariableValueType::Bool => Self::Bool(
template
.initial_value
.to_lowercase()
.parse()
.unwrap_or_default(),
),
VariableValueType::Float => {
Self::Float(template.initial_value.parse().unwrap_or_default())
}
}
}
pub fn to_client(&self) -> FightVariable {
match self {
Self::Int(val) => FightVariable {
r#type: 1,
int_value: *val,
..Default::default()
},
Self::Bool(val) => FightVariable {
r#type: 4,
int_value: *val as i64,
..Default::default()
},
Self::Float(val) => FightVariable {
r#type: 2,
float_value: *val,
..Default::default()
},
}
}
}

View file

@ -12,6 +12,7 @@ pub enum ESceneType {
Fight = 3, Fight = 3,
Fresh = 4, Fresh = 4,
MultiFight = 5, MultiFight = 5,
LongFight = 7,
} }
#[allow(dead_code)] #[allow(dead_code)]
@ -26,6 +27,28 @@ pub enum EQuestType {
HollowChallenge = 6, HollowChallenge = 6,
ArchiveBattle = 7, ArchiveBattle = 7,
Knowledge = 8, Knowledge = 8,
Daily = 9,
}
#[allow(dead_code)]
#[derive(Debug, PartialEq, Eq, Clone, Copy, FromPrimitive)]
#[repr(u32)]
pub enum EHollowQuestType {
ChallengeChaos = 6,
BossRushBattle = 14,
World = 8,
MainQuest = 1,
SideQuest = 2,
#[default]
Common = 0,
Challenge = 5,
PromoteBattle = 11,
DifficutyBattle = 12,
AvatarSide = 7,
RallyBattle = 13,
Urgent = 3,
UrgentSupplement = 4,
NormalBattle = 10,
} }
#[derive(Debug, Default, PartialEq, Eq, Clone, Copy, FromPrimitive)] #[derive(Debug, Default, PartialEq, Eq, Clone, Copy, FromPrimitive)]
@ -102,6 +125,17 @@ pub enum TimePeriodType {
Night = 2, Night = 2,
} }
impl TimePeriodType {
pub fn from_str(s: &str) -> Self {
match s {
"Morning" => Self::Morning,
"Evening" => Self::Evening,
"Night" => Self::Night,
_ => Self::Morning,
}
}
}
impl Display for TimePeriodType { impl Display for TimePeriodType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Debug::fmt(self, f) std::fmt::Debug::fmt(self, f)
@ -122,6 +156,21 @@ pub enum WeatherType {
None = 0xFFFFFFFF, None = 0xFFFFFFFF,
} }
impl WeatherType {
pub fn from_str(s: &str) -> Self {
match s {
"SunShine" => Self::SunShine,
"Fog" => Self::Fog,
"Cloudy" => Self::Cloudy,
"Rain" => Self::Rain,
"Thunder" => Self::Thunder,
"ThickFog" => Self::ThickFog,
"ThickCloudy" => Self::ThickCloudy,
_ => Self::SunShine,
}
}
}
impl Display for WeatherType { impl Display for WeatherType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Debug::fmt(self, f) std::fmt::Debug::fmt(self, f)
@ -264,7 +313,7 @@ pub enum BaseProperty {
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)] #[repr(i32)]
pub enum BuddyTeamType { pub enum BuddyTeamType {
Unknown = 0, RallyGuidance = 0,
Fighting = 1, Fighting = 1,
Assisting = 2, Assisting = 2,
} }
@ -272,7 +321,7 @@ pub enum BuddyTeamType {
impl BuddyTeamType { impl BuddyTeamType {
pub fn to_protocol(&self) -> ::proto::BuddyTeamType { pub fn to_protocol(&self) -> ::proto::BuddyTeamType {
match *self { match *self {
Self::Unknown => ::proto::BuddyTeamType::Unknown, Self::RallyGuidance => ::proto::BuddyTeamType::RallyGuidance,
Self::Fighting => ::proto::BuddyTeamType::Fighting, Self::Fighting => ::proto::BuddyTeamType::Fighting,
Self::Assisting => ::proto::BuddyTeamType::Assisting, Self::Assisting => ::proto::BuddyTeamType::Assisting,
} }

View file

@ -1,26 +1,39 @@
use common::util; use common::util;
use data::tables::{ArchiveBattleQuestID, TrainingQuestID}; use data::tables::{
self, ArchiveBattleQuestID, BattleEventConfigID, HollowQuestID, TrainingQuestID,
};
use proto::{DungeonInfo, DungeonItemData, FightSceneInfo, SceneInfo, WeatherPoolInfo}; use proto::{DungeonInfo, DungeonItemData, FightSceneInfo, SceneInfo, WeatherPoolInfo};
use thiserror::Error; use thiserror::Error;
use crate::logic::{ use crate::logic::{
battle::{EquippedBuddyDataItem, InLevelAvatarDataItem, TeamDataItem}, battle::{
ELocalPlayType, ESceneType, TimePeriodType, WeatherType, drop::FightDropPool,
unit::{AvatarUnit, BuddyUnit},
BuddyParam, DungeonQuestManager, TeamDataItem,
},
BuddyTeamType, EHollowQuestType, ELocalPlayType, ESceneType, TimePeriodType, WeatherType,
}; };
use super::NapGameMode; use super::NapGameMode;
#[derive(Error, Debug)] #[derive(Error, Debug)]
pub enum HollowGameError {} pub enum HollowGameError {
#[error("Quest ({0}) type is not supported: {1:?}")]
QuestTypeNotSupported(u32, EHollowQuestType),
#[error("Battle group not found, quest id: {0}")]
BattleGroupNotFound(u32),
}
pub struct HollowGame { pub struct HollowGame {
pub quest_id: u32, pub quest_id: u32,
pub battle_event_id: u32, pub battle_event_id: BattleEventConfigID,
pub time_period: TimePeriodType, pub time_period: TimePeriodType,
pub weather: WeatherType, pub weather: WeatherType,
pub play_type: ELocalPlayType, pub play_type: ELocalPlayType,
pub start_timestamp: i64, pub start_timestamp: i64,
pub team_data: TeamDataItem, pub team_data: TeamDataItem,
pub fight_drop_pool: FightDropPool,
pub quest_manager: DungeonQuestManager,
} }
impl HollowGame { impl HollowGame {
@ -38,7 +51,9 @@ impl HollowGame {
weather: WeatherType::SunShine, weather: WeatherType::SunShine,
start_timestamp: util::cur_timestamp() as i64, start_timestamp: util::cur_timestamp() as i64,
play_type, play_type,
team_data: TeamDataItem::new(avatars, 0), team_data: TeamDataItem::new(avatars, &[]),
fight_drop_pool: FightDropPool::new(template.battle_event_id),
quest_manager: DungeonQuestManager::default(),
}) })
} }
@ -57,9 +72,66 @@ impl HollowGame {
weather: WeatherType::SunShine, weather: WeatherType::SunShine,
start_timestamp: util::cur_timestamp() as i64, start_timestamp: util::cur_timestamp() as i64,
play_type, play_type,
team_data: TeamDataItem::new(avatars, buddy_id), team_data: TeamDataItem::new(
avatars,
&(buddy_id != 0)
.then_some(vec![BuddyParam(buddy_id, BuddyTeamType::Fighting)])
.unwrap_or_default(),
),
fight_drop_pool: FightDropPool::new(template.battle_event_id),
quest_manager: DungeonQuestManager::default(),
}) })
} }
pub fn create_pure_hollow_battle(
quest_id: HollowQuestID,
avatars: &[u32],
buddy_id: u32,
time_period: TimePeriodType,
weather: WeatherType,
) -> Result<Self, HollowGameError> {
let template = quest_id.template();
if template.chess_board_id != 0 {
return Err(HollowGameError::QuestTypeNotSupported(
template.id.value(),
EHollowQuestType::from(template.hollow_quest_type),
));
}
let Some(battle_group) = tables::battle_group_config_template_tb::iter()
.find(|tmpl| tmpl.quest_id == template.id.value())
else {
return Err(HollowGameError::BattleGroupNotFound(template.id.value()));
};
Ok(Self {
quest_id: template.id.value(),
battle_event_id: battle_group.battle_event_id,
time_period,
weather,
start_timestamp: util::cur_timestamp() as i64,
play_type: Self::get_play_type_by_quest_type(EHollowQuestType::from(
template.hollow_quest_type,
)),
team_data: TeamDataItem::new(
avatars,
&(buddy_id != 0)
.then_some(vec![BuddyParam(buddy_id, BuddyTeamType::Fighting)])
.unwrap_or_default(),
),
fight_drop_pool: FightDropPool::new(battle_group.battle_event_id),
quest_manager: DungeonQuestManager::new_for_battle_group(battle_group.id),
})
}
pub fn get_play_type_by_quest_type(quest_type: EHollowQuestType) -> ELocalPlayType {
match quest_type {
EHollowQuestType::NormalBattle => ELocalPlayType::PureHollowBattle,
EHollowQuestType::BossRushBattle => ELocalPlayType::BossRushBattle,
EHollowQuestType::DifficutyBattle => ELocalPlayType::PureHollowBattleHardmode,
_ => ELocalPlayType::PureHollowBattle,
}
}
} }
impl NapGameMode for HollowGame { impl NapGameMode for HollowGame {
@ -70,14 +142,16 @@ impl NapGameMode for HollowGame {
fn scene_info(&self) -> Option<SceneInfo> { fn scene_info(&self) -> Option<SceneInfo> {
Some(SceneInfo { Some(SceneInfo {
scene_type: self.scene_type() as u32, scene_type: self.scene_type() as u32,
battle_event_id: self.battle_event_id, battle_event_id: self.battle_event_id.value(),
play_type: self.play_type as u32, play_type: self.play_type as u32,
fight_scene_info: Some(FightSceneInfo { fight_scene_info: Some(FightSceneInfo {
nmhdkmcabjg: true,
weather_pool: Some(WeatherPoolInfo { weather_pool: Some(WeatherPoolInfo {
time_period: self.time_period.to_string(), time_period: self.time_period.to_string(),
weather: self.weather.to_string(), weather: self.weather.to_string(),
..Default::default() ..Default::default()
}), }),
fight_drop_info: Some(self.fight_drop_pool.to_client()),
..Default::default() ..Default::default()
}), }),
..Default::default() ..Default::default()
@ -93,14 +167,15 @@ impl NapGameMode for HollowGame {
.team_data .team_data
.avatar_member_list .avatar_member_list
.iter() .iter()
.map(InLevelAvatarDataItem::to_client) .map(AvatarUnit::to_client)
.collect(), .collect(),
buddy_list: self buddy_list: self
.team_data .team_data
.equipped_buddy_list .equipped_buddy_list
.iter() .iter()
.map(EquippedBuddyDataItem::to_client) .map(BuddyUnit::to_client)
.collect(), .collect(),
dungeon_quest_info: Some(self.quest_manager.to_client()),
..Default::default() ..Default::default()
}) })
} }

View file

@ -0,0 +1,141 @@
use common::util;
use data::tables::{self, BattleEventConfigID, HollowQuestID};
use proto::{
DungeonInfo, DungeonItemData, FightQuestInfo, LongFightInfo, LongFightSceneInfo, SceneInfo,
WeatherPoolInfo,
};
use thiserror::Error;
use crate::logic::{
battle::{
drop::FightDropPool,
unit::{AvatarUnit, BuddyUnit},
BuddyParam, DungeonQuestManager, LogicVariableTable, TeamDataItem,
},
BuddyTeamType, EHollowQuestType, ELocalPlayType, ESceneType, TimePeriodType, WeatherType,
};
use super::NapGameMode;
#[derive(Error, Debug)]
pub enum LongFightGameError {
#[error("Tried to run quest of type {0:?} using LongFight logic")]
InvalidQuestType(EHollowQuestType),
#[error("Battle group not found, quest id: {0}")]
BattleGroupNotFound(u32),
}
pub struct LongFightGame {
pub quest_id: u32,
pub battle_event_id: BattleEventConfigID,
pub play_type: ELocalPlayType,
pub time_period: TimePeriodType,
pub weather: WeatherType,
pub start_timestamp: i64,
pub team_data: TeamDataItem,
pub variable_table: LogicVariableTable,
pub fight_drop_pool: FightDropPool,
pub quest_manager: DungeonQuestManager,
}
impl LongFightGame {
const RALLY_GUIDANCE_BUDDY_ID: u32 = 50001;
pub fn create_rally_game(
quest_id: HollowQuestID,
avatars: &[u32],
buddy_id: u32,
time_period: TimePeriodType,
weather: WeatherType,
) -> Result<Self, LongFightGameError> {
let template = quest_id.template();
let quest_type = EHollowQuestType::from(template.hollow_quest_type);
if quest_type != EHollowQuestType::RallyBattle {
return Err(LongFightGameError::InvalidQuestType(quest_type));
}
let Some(battle_group) = tables::battle_group_config_template_tb::iter()
.find(|tmpl| tmpl.quest_id == template.id.value())
else {
return Err(LongFightGameError::BattleGroupNotFound(template.id.value()));
};
let mut buddy_params = vec![BuddyParam(
Self::RALLY_GUIDANCE_BUDDY_ID,
BuddyTeamType::RallyGuidance,
)];
if buddy_id != 0 {
buddy_params.push(BuddyParam(buddy_id, BuddyTeamType::Fighting));
}
Ok(Self {
quest_id: template.id.value(),
battle_event_id: battle_group.battle_event_id,
play_type: ELocalPlayType::RallyLongFight,
time_period,
weather,
start_timestamp: util::cur_timestamp() as i64,
team_data: TeamDataItem::new(avatars, &buddy_params),
variable_table: LogicVariableTable::new(battle_group.battle_event_id),
fight_drop_pool: FightDropPool::new(battle_group.battle_event_id),
quest_manager: DungeonQuestManager::new_for_battle_group(battle_group.id),
})
}
}
impl NapGameMode for LongFightGame {
fn scene_type(&self) -> ESceneType {
ESceneType::LongFight
}
fn scene_info(&self) -> Option<SceneInfo> {
Some(SceneInfo {
scene_type: self.scene_type() as u32,
battle_event_id: self.battle_event_id.value(),
play_type: self.play_type as u32,
long_fight_scene_info: Some(LongFightSceneInfo {
fight_data: Some(LongFightInfo {
fight_quest_info: Some(FightQuestInfo {
fight_variable_map: self.variable_table.to_client(),
..Default::default()
}),
..Default::default()
}),
fight_drop_info: Some(self.fight_drop_pool.to_client()),
weather_pool: Some(WeatherPoolInfo {
time_period: self.time_period.to_string(),
weather: self.weather.to_string(),
febgjinpcbp: true,
bejeblcfcha: true,
..Default::default()
}),
..Default::default()
}),
..Default::default()
})
}
fn dungeon_info(&self) -> Option<DungeonInfo> {
Some(DungeonInfo {
quest_id: self.quest_id,
start_timestamp: self.start_timestamp,
dungeon_item_data: Some(DungeonItemData::default()),
avatar_list: self
.team_data
.avatar_member_list
.iter()
.map(AvatarUnit::to_client)
.collect(),
buddy_list: self
.team_data
.equipped_buddy_list
.iter()
.map(BuddyUnit::to_client)
.collect(),
dungeon_quest_info: Some(self.quest_manager.to_client()),
..Default::default()
})
}
}

View file

@ -1,20 +1,23 @@
mod fresh; mod fresh;
mod frontend; mod frontend;
mod hollow; mod hollow;
mod long_fight;
pub use fresh::*; pub use fresh::*;
pub use frontend::*; pub use frontend::*;
pub use hollow::*; pub use hollow::*;
pub use long_fight::*;
use proto::{DungeonInfo, SceneInfo, WorldInitScNotify}; use proto::{DungeonInfo, SceneInfo, WorldInitScNotify};
use thiserror::Error; use thiserror::Error;
use super::{procedure::ProcedureError, ESceneType}; use super::{battle::DungeonQuestError, procedure::ProcedureError, ESceneType};
#[derive(Default)] #[derive(Default)]
pub enum GameInstance { pub enum GameInstance {
Frontend(FrontendGame), Frontend(FrontendGame),
Fresh(FreshGame), Fresh(FreshGame),
Hollow(HollowGame), Hollow(HollowGame),
LongFight(LongFightGame),
#[default] #[default]
Null, Null,
} }
@ -29,6 +32,10 @@ pub enum LogicError {
Procedure(#[from] ProcedureError), Procedure(#[from] ProcedureError),
#[error("hollow error: {0}")] #[error("hollow error: {0}")]
Hollow(#[from] HollowGameError), Hollow(#[from] HollowGameError),
#[error("longfight error: {0}")]
LongFight(#[from] LongFightGameError),
#[error("dungeon quest error: {0}")]
DungeonQuest(#[from] DungeonQuestError),
} }
impl GameInstance { impl GameInstance {
@ -41,6 +48,7 @@ impl GameInstance {
Self::Frontend(game) => game, Self::Frontend(game) => game,
Self::Fresh(game) => game, Self::Fresh(game) => game,
Self::Hollow(game) => game, Self::Hollow(game) => game,
Self::LongFight(game) => game,
Self::Null => return Err(LogicError::GameIsNull), Self::Null => return Err(LogicError::GameIsNull),
})) }))
} }

View file

@ -378,7 +378,7 @@ pub struct Pijchhdicik {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Plfbkmmmdbm { pub struct Plfbkmmmdbm {
#[prost(map = "uint32, int32", tag = "15")] #[prost(map = "uint32, int32", tag = "15")]
pub nknnphiofnc: ::std::collections::HashMap<u32, i32>, pub reward_item_map: ::std::collections::HashMap<u32, i32>,
#[xor(10983)] #[xor(10983)]
#[prost(uint32, tag = "7")] #[prost(uint32, tag = "7")]
pub num: u32, pub num: u32,
@ -449,7 +449,7 @@ pub struct Ebjndhaabhd {}
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Bpjgcjfagjn { pub struct StartHollowQuestScRsp {
#[xor(10421)] #[xor(10421)]
#[prost(int32, tag = "12")] #[prost(int32, tag = "12")]
pub retcode: i32, pub retcode: i32,
@ -1181,7 +1181,7 @@ pub struct Dpcaompjmkd {
pub struct Leijdkhanbk { pub struct Leijdkhanbk {
#[xor(3946)] #[xor(3946)]
#[prost(uint32, tag = "3")] #[prost(uint32, tag = "3")]
pub bodgohfdpdm: u32, pub reward_id: u32,
#[prost(uint32, repeated, tag = "11")] #[prost(uint32, repeated, tag = "11")]
pub jbgdcefooig: ::prost::alloc::vec::Vec<u32>, pub jbgdcefooig: ::prost::alloc::vec::Vec<u32>,
} }
@ -1408,7 +1408,7 @@ pub struct Cgfaciihkhg {
pub retcode: i32, pub retcode: i32,
#[xor(11896)] #[xor(11896)]
#[prost(uint32, tag = "4")] #[prost(uint32, tag = "4")]
pub bodgohfdpdm: u32, pub reward_id: u32,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(506)] #[cmdid(506)]
@ -2797,7 +2797,7 @@ pub struct Eoaebmjlfjc {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct EquippedBuddyData { pub struct BuddyUnitInfo {
#[xor(8856)] #[xor(8856)]
#[prost(uint32, tag = "9")] #[prost(uint32, tag = "9")]
pub buddy_id: u32, pub buddy_id: u32,
@ -3569,7 +3569,7 @@ pub struct Oibjennolgc {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Jjfgnfbllam { pub struct Jjfgnfbllam {
#[prost(message, optional, tag = "5")] #[prost(message, optional, tag = "5")]
pub imlccggifln: ::core::option::Option<Dakiokjppim>, pub imlccggifln: ::core::option::Option<RewardItems>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -6213,12 +6213,12 @@ pub struct Idjdkpcemml {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Kcpiaoolaoa { pub struct DungeonQuestInfo {
#[xor(14765)] #[xor(14765)]
#[prost(uint32, tag = "6")] #[prost(uint32, tag = "6")]
pub ddpnajpnana: u32, pub ddpnajpnana: u32,
#[prost(uint32, repeated, tag = "14")] #[prost(uint32, repeated, tag = "14")]
pub lpkbljdldhh: ::prost::alloc::vec::Vec<u32>, pub inner_quest_id_list: ::prost::alloc::vec::Vec<u32>,
#[prost(bool, tag = "7")] #[prost(bool, tag = "7")]
pub mbkjmjajnfh: bool, pub mbkjmjajnfh: bool,
} }
@ -6525,7 +6525,7 @@ pub struct FightSceneInfo {
#[prost(bool, tag = "4")] #[prost(bool, tag = "4")]
pub nmhdkmcabjg: bool, pub nmhdkmcabjg: bool,
#[prost(message, optional, tag = "2")] #[prost(message, optional, tag = "2")]
pub ecchkhdeaip: ::core::option::Option<Micfkdoklip>, pub fight_drop_info: ::core::option::Option<FightDropInfo>,
#[prost(message, optional, tag = "12")] #[prost(message, optional, tag = "12")]
pub weather_pool: ::core::option::Option<WeatherPoolInfo>, pub weather_pool: ::core::option::Option<WeatherPoolInfo>,
#[prost(enumeration = "Nohmcjnnpmm", tag = "8")] #[prost(enumeration = "Nohmcjnnpmm", tag = "8")]
@ -9094,7 +9094,7 @@ pub struct Fngaidbpnkj {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Gkfhklbbcpo { pub struct Gkfhklbbcpo {
#[prost(message, optional, tag = "1")] #[prost(message, optional, tag = "1")]
pub bodgohfdpdm: ::core::option::Option<StringEntry>, pub reward_id: ::core::option::Option<StringEntry>,
#[prost(message, optional, tag = "2")] #[prost(message, optional, tag = "2")]
pub hcbmgnoifbm: ::core::option::Option<StringEntry>, pub hcbmgnoifbm: ::core::option::Option<StringEntry>,
#[prost(bool, tag = "3")] #[prost(bool, tag = "3")]
@ -9187,7 +9187,7 @@ pub struct Bffgkjikbhp {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Cidlkacaddl { pub struct Cidlkacaddl {
#[prost(message, optional, tag = "4")] #[prost(message, optional, tag = "4")]
pub hoilnlbpbhj: ::core::option::Option<Apeikaeanjn>, pub fight_data: ::core::option::Option<LongFightInfo>,
#[prost(message, optional, tag = "1")] #[prost(message, optional, tag = "1")]
pub weather_pool: ::core::option::Option<WeatherPoolInfo>, pub weather_pool: ::core::option::Option<WeatherPoolInfo>,
#[prost(bool, tag = "3")] #[prost(bool, tag = "3")]
@ -9945,7 +9945,7 @@ pub struct Ldoblghjoln {
pub struct Igoalcdgmjl { pub struct Igoalcdgmjl {
#[xor(3591)] #[xor(3591)]
#[prost(uint32, tag = "4")] #[prost(uint32, tag = "4")]
pub bodgohfdpdm: u32, pub reward_id: u32,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(832)] #[cmdid(832)]
@ -10309,15 +10309,15 @@ pub struct Hiedoccooec {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Pdodojnohie { pub struct FightReward {
#[xor(11616)] #[xor(11616)]
#[prost(uint32, tag = "13")] #[prost(uint32, tag = "13")]
pub lkcfnbhnfea: u32, pub lkcfnbhnfea: u32,
#[xor(2332)] #[xor(2332)]
#[prost(uint32, tag = "9")] #[prost(uint32, tag = "9")]
pub bodgohfdpdm: u32, pub reward_id: u32,
#[prost(map = "uint32, message", tag = "4")] #[prost(map = "uint32, message", tag = "4")]
pub imfkhpmeddc: ::std::collections::HashMap<u32, Dakiokjppim>, pub fight_reward_map: ::std::collections::HashMap<u32, RewardItems>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -10674,7 +10674,7 @@ pub struct Hldiflejdfc {
#[prost(int32, tag = "12")] #[prost(int32, tag = "12")]
pub retcode: i32, pub retcode: i32,
#[prost(message, optional, tag = "5")] #[prost(message, optional, tag = "5")]
pub fbenfhmeoib: ::core::option::Option<Dakiokjppim>, pub fbenfhmeoib: ::core::option::Option<RewardItems>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(2970)] #[cmdid(2970)]
@ -11288,9 +11288,9 @@ pub struct Hingogdjkgk {}
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Kkdokpblmel { pub struct LongFightSceneInfo {
#[prost(message, optional, tag = "4")] #[prost(message, optional, tag = "4")]
pub hoilnlbpbhj: ::core::option::Option<Apeikaeanjn>, pub fight_data: ::core::option::Option<LongFightInfo>,
#[xor(9629)] #[xor(9629)]
#[prost(uint32, tag = "15")] #[prost(uint32, tag = "15")]
pub pimheackgbn: u32, pub pimheackgbn: u32,
@ -11298,7 +11298,7 @@ pub struct Kkdokpblmel {
#[prost(uint32, tag = "13")] #[prost(uint32, tag = "13")]
pub godemojnplf: u32, pub godemojnplf: u32,
#[prost(message, optional, tag = "2")] #[prost(message, optional, tag = "2")]
pub ecchkhdeaip: ::core::option::Option<Micfkdoklip>, pub fight_drop_info: ::core::option::Option<FightDropInfo>,
#[xor(521)] #[xor(521)]
#[prost(uint32, tag = "10")] #[prost(uint32, tag = "10")]
pub bepokkffcno: u32, pub bepokkffcno: u32,
@ -12103,7 +12103,7 @@ pub struct Fnkcmdleffa {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Apeikaeanjn { pub struct LongFightInfo {
#[prost(message, repeated, tag = "5")] #[prost(message, repeated, tag = "5")]
pub kcbpcgehkop: ::prost::alloc::vec::Vec<Edbojjhlefk>, pub kcbpcgehkop: ::prost::alloc::vec::Vec<Edbojjhlefk>,
#[prost(uint32, repeated, tag = "2")] #[prost(uint32, repeated, tag = "2")]
@ -12133,7 +12133,7 @@ pub struct Apeikaeanjn {
#[prost(int32, tag = "1")] #[prost(int32, tag = "1")]
pub nnhpiaalhbb: i32, pub nnhpiaalhbb: i32,
#[prost(message, optional, tag = "15")] #[prost(message, optional, tag = "15")]
pub bfcjlcmoneo: ::core::option::Option<Ibapndpfkgg>, pub fight_quest_info: ::core::option::Option<FightQuestInfo>,
#[xor(10292)] #[xor(10292)]
#[prost(int32, tag = "11")] #[prost(int32, tag = "11")]
pub fejncgfeejm: i32, pub fejncgfeejm: i32,
@ -12166,7 +12166,7 @@ pub struct Phfdjdddddf {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Mbfcgalihdj { pub struct Mbfcgalihdj {
#[prost(message, repeated, tag = "1")] #[prost(message, repeated, tag = "1")]
pub hoilnlbpbhj: ::prost::alloc::vec::Vec<Dhnkecjhcph>, pub fight_data: ::prost::alloc::vec::Vec<Dhnkecjhcph>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(1344)] #[cmdid(1344)]
@ -14695,7 +14695,7 @@ pub struct Leojkfpnfnh {
#[prost(int32, tag = "8")] #[prost(int32, tag = "8")]
pub retcode: i32, pub retcode: i32,
#[prost(message, optional, tag = "3")] #[prost(message, optional, tag = "3")]
pub imlccggifln: ::core::option::Option<Dakiokjppim>, pub imlccggifln: ::core::option::Option<RewardItems>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -15583,7 +15583,7 @@ pub struct Ekbekcnehij {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Kngeifmanhe { pub struct FinishHollowBattleEventScRsp {
#[xor(8897)] #[xor(8897)]
#[prost(int32, tag = "3")] #[prost(int32, tag = "3")]
pub retcode: i32, pub retcode: i32,
@ -16216,7 +16216,7 @@ pub struct NeedItemInfo {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Onlmpmgcdle { pub struct Onlmpmgcdle {
#[prost(message, repeated, tag = "13")] #[prost(message, repeated, tag = "13")]
pub buddy_list: ::prost::alloc::vec::Vec<EquippedBuddyData>, pub buddy_list: ::prost::alloc::vec::Vec<BuddyUnitInfo>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(5211)] #[cmdid(5211)]
@ -18513,9 +18513,9 @@ pub struct ItemSync {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Dakiokjppim { pub struct RewardItems {
#[prost(map = "uint32, uint32", tag = "1")] #[prost(map = "uint32, uint32", tag = "1")]
pub nknnphiofnc: ::std::collections::HashMap<u32, u32>, pub reward_item_map: ::std::collections::HashMap<u32, u32>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -18711,9 +18711,9 @@ pub struct Kajaeggdaed {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Kokopmmjjkd { pub struct LongFightProgressUpdateCsReq {
#[prost(message, optional, tag = "5")] #[prost(message, optional, tag = "5")]
pub dpfkafjjpgg: ::core::option::Option<Apeikaeanjn>, pub dpfkafjjpgg: ::core::option::Option<LongFightInfo>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -18886,7 +18886,7 @@ pub struct Fplohgjjakh {}
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Mlmhhgahjef { pub struct Mlmhhgahjef {
#[prost(map = "uint32, uint32", tag = "5")] #[prost(map = "uint32, uint32", tag = "5")]
pub nknnphiofnc: ::std::collections::HashMap<u32, u32>, pub reward_item_map: ::std::collections::HashMap<u32, u32>,
#[prost(message, repeated, tag = "13")] #[prost(message, repeated, tag = "13")]
pub klbehoieibi: ::prost::alloc::vec::Vec<Cojcpppiloj>, pub klbehoieibi: ::prost::alloc::vec::Vec<Cojcpppiloj>,
} }
@ -18942,7 +18942,7 @@ pub struct BattleResult {
#[prost(int32, tag = "13")] #[prost(int32, tag = "13")]
pub fejncgfeejm: i32, pub fejncgfeejm: i32,
#[prost(message, optional, tag = "14")] #[prost(message, optional, tag = "14")]
pub bfcjlcmoneo: ::core::option::Option<Ibapndpfkgg>, pub fight_quest_info: ::core::option::Option<FightQuestInfo>,
#[prost(uint32, tag = "15")] #[prost(uint32, tag = "15")]
pub fjochpjpckk: u32, pub fjochpjpckk: u32,
#[prost(uint32, tag = "16")] #[prost(uint32, tag = "16")]
@ -20432,14 +20432,14 @@ pub struct Bhadkflffdn {
#[prost(int32, repeated, tag = "11")] #[prost(int32, repeated, tag = "11")]
pub lafgnlffjap: ::prost::alloc::vec::Vec<i32>, pub lafgnlffjap: ::prost::alloc::vec::Vec<i32>,
#[prost(message, optional, tag = "1")] #[prost(message, optional, tag = "1")]
pub nknnphiofnc: ::core::option::Option<Dakiokjppim>, pub reward_item_map: ::core::option::Option<RewardItems>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(616)] #[cmdid(616)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Digbkbbhapo {} pub struct FinishHollowBattleEventCsReq {}
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(452)] #[cmdid(452)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -21885,7 +21885,7 @@ pub struct Hfmncckhjlb {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct ArchiveQuestsSeenCsReq { pub struct JumpPageSystemCsReq {
#[prost(bool, tag = "8")] #[prost(bool, tag = "8")]
pub ehmopjccohg: bool, pub ehmopjccohg: bool,
#[prost(bool, tag = "7")] #[prost(bool, tag = "7")]
@ -23013,7 +23013,7 @@ pub struct Gpaeenlhmeg {
#[prost(uint32, tag = "14")] #[prost(uint32, tag = "14")]
pub ielhdeegnof: u32, pub ielhdeegnof: u32,
#[prost(message, optional, tag = "1")] #[prost(message, optional, tag = "1")]
pub ecchkhdeaip: ::core::option::Option<Micfkdoklip>, pub fight_drop_info: ::core::option::Option<FightDropInfo>,
#[xor(11485)] #[xor(11485)]
#[prost(uint32, tag = "11")] #[prost(uint32, tag = "11")]
pub pimheackgbn: u32, pub pimheackgbn: u32,
@ -23095,7 +23095,7 @@ pub struct Jjmnjckodgk {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Fopnijbcimm { pub struct Fopnijbcimm {
#[prost(map = "uint32, message", tag = "1")] #[prost(map = "uint32, message", tag = "1")]
pub foicfpfnlcf: ::std::collections::HashMap<u32, InLevelAvatarData>, pub foicfpfnlcf: ::std::collections::HashMap<u32, AvatarUnitInfo>,
#[prost(uint32, repeated, tag = "6")] #[prost(uint32, repeated, tag = "6")]
pub ajnocghpbmj: ::prost::alloc::vec::Vec<u32>, pub ajnocghpbmj: ::prost::alloc::vec::Vec<u32>,
#[prost(bool, tag = "12")] #[prost(bool, tag = "12")]
@ -23240,7 +23240,7 @@ pub struct Ohecicdbffc {}
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Jjeopgljjdi { pub struct Jjeopgljjdi {
#[prost(message, optional, tag = "15")] #[prost(message, optional, tag = "15")]
pub imlccggifln: ::core::option::Option<Dakiokjppim>, pub imlccggifln: ::core::option::Option<RewardItems>,
#[xor(3398)] #[xor(3398)]
#[prost(int32, tag = "2")] #[prost(int32, tag = "2")]
pub retcode: i32, pub retcode: i32,
@ -23358,7 +23358,7 @@ pub struct Bkfegfokfhb {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Nnibknhmkde { pub struct Nnibknhmkde {
#[prost(message, optional, tag = "4")] #[prost(message, optional, tag = "4")]
pub hjnilekelcl: ::core::option::Option<Dakiokjppim>, pub hjnilekelcl: ::core::option::Option<RewardItems>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -23765,15 +23765,15 @@ pub struct Ifehnndilna {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Gjahalfimjf { pub struct FightVariable {
#[prost(uint32, tag = "1")] #[prost(uint32, tag = "1")]
pub r#type: u32, pub r#type: u32,
#[prost(int64, tag = "3")] #[prost(int64, tag = "3")]
pub ckaehkfnglp: i64, pub int_value: i64,
#[prost(double, tag = "5")] #[prost(double, tag = "5")]
pub cajdgnnmhnc: f64, pub float_value: f64,
#[prost(string, tag = "6")] #[prost(string, tag = "6")]
pub ihdplhhldbg: ::prost::alloc::string::String, pub string_value: ::prost::alloc::string::String,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(37)] #[cmdid(37)]
@ -24091,13 +24091,13 @@ pub struct Geacbdjcidc {}
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Micfkdoklip { pub struct FightDropInfo {
#[prost(message, repeated, tag = "4")] #[prost(message, repeated, tag = "4")]
pub njnjifcplpc: ::prost::alloc::vec::Vec<Pdodojnohie>, pub normal_drop_list: ::prost::alloc::vec::Vec<FightReward>,
#[prost(message, repeated, tag = "13")] #[prost(message, repeated, tag = "13")]
pub nfjppfdhjln: ::prost::alloc::vec::Vec<Pdodojnohie>, pub special_drop_list: ::prost::alloc::vec::Vec<FightReward>,
#[prost(message, repeated, tag = "14")] #[prost(message, repeated, tag = "14")]
pub lnjhkpgojjo: ::prost::alloc::vec::Vec<Pdodojnohie>, pub lnjhkpgojjo: ::prost::alloc::vec::Vec<FightReward>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -25751,13 +25751,13 @@ pub struct DungeonInfo {
#[prost(message, optional, tag = "3")] #[prost(message, optional, tag = "3")]
pub ncfafdpojjh: ::core::option::Option<Kalfjemiaaa>, pub ncfafdpojjh: ::core::option::Option<Kalfjemiaaa>,
#[prost(message, optional, tag = "8")] #[prost(message, optional, tag = "8")]
pub buddy: ::core::option::Option<EquippedBuddyData>, pub buddy: ::core::option::Option<BuddyUnitInfo>,
#[prost(bool, tag = "1724")] #[prost(bool, tag = "1724")]
pub gjhgpapkmod: bool, pub gjhgpapkmod: bool,
#[prost(bool, tag = "1109")] #[prost(bool, tag = "1109")]
pub jgkfjmdinmo: bool, pub jgkfjmdinmo: bool,
#[prost(message, repeated, tag = "13")] #[prost(message, repeated, tag = "13")]
pub avatar_list: ::prost::alloc::vec::Vec<InLevelAvatarData>, pub avatar_list: ::prost::alloc::vec::Vec<AvatarUnitInfo>,
#[prost(message, optional, tag = "522")] #[prost(message, optional, tag = "522")]
pub chnhoilfkhf: ::core::option::Option<Afhnppffhoh>, pub chnhoilfkhf: ::core::option::Option<Afhnppffhoh>,
#[prost(message, optional, tag = "1725")] #[prost(message, optional, tag = "1725")]
@ -25769,7 +25769,7 @@ pub struct DungeonInfo {
#[prost(map = "uint32, int32", tag = "7")] #[prost(map = "uint32, int32", tag = "7")]
pub njfikojmpcm: ::std::collections::HashMap<u32, i32>, pub njfikojmpcm: ::std::collections::HashMap<u32, i32>,
#[prost(message, repeated, tag = "1395")] #[prost(message, repeated, tag = "1395")]
pub buddy_list: ::prost::alloc::vec::Vec<EquippedBuddyData>, pub buddy_list: ::prost::alloc::vec::Vec<BuddyUnitInfo>,
#[prost(message, optional, tag = "2")] #[prost(message, optional, tag = "2")]
pub dungeon_item_data: ::core::option::Option<DungeonItemData>, pub dungeon_item_data: ::core::option::Option<DungeonItemData>,
#[prost(message, optional, tag = "5")] #[prost(message, optional, tag = "5")]
@ -25801,7 +25801,7 @@ pub struct DungeonInfo {
#[prost(message, repeated, tag = "6")] #[prost(message, repeated, tag = "6")]
pub leccoclclio: ::prost::alloc::vec::Vec<Kkncmfaiipc>, pub leccoclclio: ::prost::alloc::vec::Vec<Kkncmfaiipc>,
#[prost(message, optional, tag = "770")] #[prost(message, optional, tag = "770")]
pub jpegbgpmkcb: ::core::option::Option<Kcpiaoolaoa>, pub dungeon_quest_info: ::core::option::Option<DungeonQuestInfo>,
#[prost(message, optional, tag = "11")] #[prost(message, optional, tag = "11")]
pub pkhipbapmhb: ::core::option::Option<Cgpajijemlj>, pub pkhipbapmhb: ::core::option::Option<Cgpajijemlj>,
} }
@ -25997,7 +25997,7 @@ pub struct Kajejllpdia {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Lchodkpiolg { pub struct LongFightProgressUpdateScRsp {
#[xor(5903)] #[xor(5903)]
#[prost(int32, tag = "3")] #[prost(int32, tag = "3")]
pub retcode: i32, pub retcode: i32,
@ -26194,7 +26194,7 @@ pub struct Aliigncbcfb {}
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct ArchiveQuestsSeenScRsp { pub struct JumpPageSystemScRsp {
#[xor(11593)] #[xor(11593)]
#[prost(int32, tag = "9")] #[prost(int32, tag = "9")]
pub retcode: i32, pub retcode: i32,
@ -26941,11 +26941,11 @@ pub struct Ebdcbdkeeij {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Ibapndpfkgg { pub struct FightQuestInfo {
#[prost(map = "string, message", tag = "1")] #[prost(map = "string, message", tag = "1")]
pub nfjmhkmgcfh: ::std::collections::HashMap< pub fight_variable_map: ::std::collections::HashMap<
::prost::alloc::string::String, ::prost::alloc::string::String,
Gjahalfimjf, FightVariable,
>, >,
#[prost(int32, tag = "2")] #[prost(int32, tag = "2")]
pub lgchgcpaebe: i32, pub lgchgcpaebe: i32,
@ -27673,7 +27673,7 @@ pub struct Dehlcmioiab {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct InLevelAvatarData { pub struct AvatarUnitInfo {
#[prost(uint32, repeated, tag = "8")] #[prost(uint32, repeated, tag = "8")]
pub fnaikfegocl: ::prost::alloc::vec::Vec<u32>, pub fnaikfegocl: ::prost::alloc::vec::Vec<u32>,
#[prost(map = "uint32, int32", tag = "14")] #[prost(map = "uint32, int32", tag = "14")]
@ -30478,7 +30478,7 @@ pub struct SceneInfo {
#[prost(message, optional, tag = "11")] #[prost(message, optional, tag = "11")]
pub ioljbfcnngh: ::core::option::Option<Kmfjldhlcaa>, pub ioljbfcnngh: ::core::option::Option<Kmfjldhlcaa>,
#[prost(message, optional, tag = "5")] #[prost(message, optional, tag = "5")]
pub oclcngkobkh: ::core::option::Option<Kkdokpblmel>, pub long_fight_scene_info: ::core::option::Option<LongFightSceneInfo>,
#[xor(13355)] #[xor(13355)]
#[prost(uint32, tag = "15")] #[prost(uint32, tag = "15")]
pub battle_event_id: u32, pub battle_event_id: u32,
@ -32332,7 +32332,7 @@ pub struct Oflcipncgff {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Fbpbgapdoio { pub struct Fbpbgapdoio {
#[prost(map = "uint32, uint32", tag = "1")] #[prost(map = "uint32, uint32", tag = "1")]
pub nknnphiofnc: ::std::collections::HashMap<u32, u32>, pub reward_item_map: ::std::collections::HashMap<u32, u32>,
#[prost(string, tag = "2")] #[prost(string, tag = "2")]
pub hacnhcflago: ::prost::alloc::string::String, pub hacnhcflago: ::prost::alloc::string::String,
#[prost(int32, repeated, tag = "3")] #[prost(int32, repeated, tag = "3")]
@ -32976,7 +32976,7 @@ pub struct Mlkecejbbnk {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Nkjdgaedenj { pub struct Nkjdgaedenj {
#[prost(map = "uint32, uint32", tag = "1")] #[prost(map = "uint32, uint32", tag = "1")]
pub nknnphiofnc: ::std::collections::HashMap<u32, u32>, pub reward_item_map: ::std::collections::HashMap<u32, u32>,
#[prost(uint32, tag = "2")] #[prost(uint32, tag = "2")]
pub amkgocmddkl: u32, pub amkgocmddkl: u32,
#[prost(uint32, tag = "3")] #[prost(uint32, tag = "3")]
@ -33763,14 +33763,14 @@ pub struct BeginnerBattleRebeginScRsp {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Dlnnaniponi { pub struct Dlnnaniponi {
#[prost(message, optional, tag = "14")] #[prost(message, optional, tag = "14")]
pub dpfkafjjpgg: ::core::option::Option<Apeikaeanjn>, pub dpfkafjjpgg: ::core::option::Option<LongFightInfo>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[cmdid(575)] #[cmdid(575)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Jhinopamaoa { pub struct StartHollowQuestCsReq {
#[prost(uint32, repeated, tag = "8")] #[prost(uint32, repeated, tag = "8")]
pub olcifcglpdd: ::prost::alloc::vec::Vec<u32>, pub olcifcglpdd: ::prost::alloc::vec::Vec<u32>,
#[prost(uint32, repeated, tag = "11")] #[prost(uint32, repeated, tag = "11")]
@ -33786,7 +33786,7 @@ pub struct Jhinopamaoa {
#[prost(bool, tag = "9")] #[prost(bool, tag = "9")]
pub is_story: bool, pub is_story: bool,
#[prost(string, tag = "15")] #[prost(string, tag = "15")]
pub aljacgiaang: ::prost::alloc::string::String, pub quest_weather: ::prost::alloc::string::String,
#[xor(15965)] #[xor(15965)]
#[prost(uint32, tag = "4")] #[prost(uint32, tag = "4")]
pub quest_id: u32, pub quest_id: u32,
@ -33802,7 +33802,7 @@ pub struct Jhinopamaoa {
#[prost(uint32, repeated, tag = "1")] #[prost(uint32, repeated, tag = "1")]
pub bfgcegliaig: ::prost::alloc::vec::Vec<u32>, pub bfgcegliaig: ::prost::alloc::vec::Vec<u32>,
#[prost(string, tag = "13")] #[prost(string, tag = "13")]
pub hhfhnaflido: ::prost::alloc::string::String, pub quest_time_period: ::prost::alloc::string::String,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -34382,7 +34382,7 @@ pub struct Gmpbopcdfdf {
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Ihngahmmdip { pub struct Ihngahmmdip {
#[prost(message, optional, tag = "10")] #[prost(message, optional, tag = "10")]
pub nknnphiofnc: ::core::option::Option<Dakiokjppim>, pub reward_item_map: ::core::option::Option<RewardItems>,
#[xor(12003)] #[xor(12003)]
#[prost(int32, tag = "1")] #[prost(int32, tag = "1")]
pub retcode: i32, pub retcode: i32,
@ -34542,7 +34542,7 @@ pub struct Eoofpncjjhk {
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
#[allow(clippy::derive_partial_eq_without_eq)] #[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)] #[derive(Clone, PartialEq, ::prost::Message)]
pub struct Pllkofkchmk { pub struct DungeonQuestFinishedScNotify {
#[prost(message, optional, tag = "1760")] #[prost(message, optional, tag = "1760")]
pub bojcpfdbolc: ::core::option::Option<Hpalfgllgje>, pub bojcpfdbolc: ::core::option::Option<Hpalfgllgje>,
#[xor(15752)] #[xor(15752)]
@ -34569,7 +34569,7 @@ pub struct Pllkofkchmk {
#[prost(uint32, tag = "763")] #[prost(uint32, tag = "763")]
pub nldgcedhoej: u32, pub nldgcedhoej: u32,
#[prost(map = "uint32, message", tag = "4")] #[prost(map = "uint32, message", tag = "4")]
pub imfkhpmeddc: ::std::collections::HashMap<u32, Jflokpkocia>, pub fight_reward_map: ::std::collections::HashMap<u32, Jflokpkocia>,
#[prost(message, repeated, tag = "9")] #[prost(message, repeated, tag = "9")]
pub kjmdchdpakf: ::prost::alloc::vec::Vec<Ifndfopgcph>, pub kjmdchdpakf: ::prost::alloc::vec::Vec<Ifndfopgcph>,
#[xor(5804)] #[xor(5804)]
@ -35132,7 +35132,7 @@ pub struct Aaooljgnjll {
#[prost(int32, tag = "13")] #[prost(int32, tag = "13")]
pub retcode: i32, pub retcode: i32,
#[prost(message, optional, tag = "6")] #[prost(message, optional, tag = "6")]
pub hoilnlbpbhj: ::core::option::Option<Bcenmkcdllf>, pub fight_data: ::core::option::Option<Bcenmkcdllf>,
} }
#[derive(proto_gen::CmdID)] #[derive(proto_gen::CmdID)]
#[derive(proto_gen::XorFields)] #[derive(proto_gen::XorFields)]
@ -48348,7 +48348,7 @@ impl DungeonContentDropPoolType {
#[repr(i32)] #[repr(i32)]
pub enum BuddyTeamType { pub enum BuddyTeamType {
None = 0, None = 0,
Unknown = 1, RallyGuidance = 1,
Fighting = 2, Fighting = 2,
Assisting = 3, Assisting = 3,
} }
@ -48360,7 +48360,7 @@ impl BuddyTeamType {
pub fn as_str_name(&self) -> &'static str { pub fn as_str_name(&self) -> &'static str {
match self { match self {
BuddyTeamType::None => "BUDDY_TEAM_TYPE_NONE", BuddyTeamType::None => "BUDDY_TEAM_TYPE_NONE",
BuddyTeamType::Unknown => "BUDDY_TEAM_TYPE_UNKNOWN", BuddyTeamType::RallyGuidance => "BUDDY_TEAM_TYPE_RALLY_GUIDANCE",
BuddyTeamType::Fighting => "BUDDY_TEAM_TYPE_FIGHTING", BuddyTeamType::Fighting => "BUDDY_TEAM_TYPE_FIGHTING",
BuddyTeamType::Assisting => "BUDDY_TEAM_TYPE_ASSISTING", BuddyTeamType::Assisting => "BUDDY_TEAM_TYPE_ASSISTING",
} }
@ -48369,7 +48369,7 @@ impl BuddyTeamType {
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> { pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value { match value {
"BUDDY_TEAM_TYPE_NONE" => Some(Self::None), "BUDDY_TEAM_TYPE_NONE" => Some(Self::None),
"BUDDY_TEAM_TYPE_UNKNOWN" => Some(Self::Unknown), "BUDDY_TEAM_TYPE_RALLY_GUIDANCE" => Some(Self::RallyGuidance),
"BUDDY_TEAM_TYPE_FIGHTING" => Some(Self::Fighting), "BUDDY_TEAM_TYPE_FIGHTING" => Some(Self::Fighting),
"BUDDY_TEAM_TYPE_ASSISTING" => Some(Self::Assisting), "BUDDY_TEAM_TYPE_ASSISTING" => Some(Self::Assisting),
_ => None, _ => None,