From 69634fda64eed5f41a2c7c379ae248e0996c807d Mon Sep 17 00:00:00 2001 From: xeon Date: Wed, 24 Jul 2024 21:36:02 +0300 Subject: [PATCH] Implement weapons Implement Weapon add, save, equip Implement 'item add_weapon' command --- assets/FileCfg/WeaponTemplateTb.json | 1815 +++++++++++++++++++ nap_data/src/tables/mod.rs | 1 + nap_data/src/tables/weapon_template.rs | 34 + nap_gameserver/src/commands/avatar.rs | 7 +- nap_gameserver/src/commands/item.rs | 52 + nap_gameserver/src/commands/mod.rs | 4 + nap_gameserver/src/commands/player.rs | 8 +- nap_gameserver/src/handlers/item.rs | 47 + nap_gameserver/src/handlers/mod.rs | 2 + nap_gameserver/src/logic/item/item_model.rs | 32 +- nap_gameserver/src/logic/item/mod.rs | 17 + nap_gameserver/src/logic/item/weapon.rs | 66 + nap_gameserver/src/logic/player/player.rs | 27 +- nap_gameserver/src/logic/role/avatar.rs | 7 + nap_proto/out/_.rs | 36 +- nap_proto/out/bin.rs | 22 + 16 files changed, 2152 insertions(+), 25 deletions(-) create mode 100644 assets/FileCfg/WeaponTemplateTb.json create mode 100644 nap_data/src/tables/weapon_template.rs create mode 100644 nap_gameserver/src/commands/item.rs create mode 100644 nap_gameserver/src/logic/item/weapon.rs diff --git a/assets/FileCfg/WeaponTemplateTb.json b/assets/FileCfg/WeaponTemplateTb.json new file mode 100644 index 0000000..b69405a --- /dev/null +++ b/assets/FileCfg/WeaponTemplateTb.json @@ -0,0 +1,1815 @@ +[ + { + "ItemID": 12001, + "CodeName": "Weapon_B_Common_01", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 12102, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_01", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_01", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101010:2|10:16800,101020:7|10:36000,101020:12|10:60000,101030:6|10:120000,101030:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_B_Common_01_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12002, + "CodeName": "Weapon_B_Common_02", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 12102, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_02", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_02", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101010:2|10:16800,101020:7|10:36000,101020:12|10:60000,101030:6|10:120000,101030:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_B_Common_02_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12003, + "CodeName": "Weapon_B_Common_03", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 20103, + "Value": 640 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_03", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_03", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101010:2|10:16800,101020:7|10:36000,101020:12|10:60000,101030:6|10:120000,101030:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_B_Common_03_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12004, + "CodeName": "Weapon_B_Common_04", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 12102, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_04", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_04", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101013:2|10:16800,101023:7|10:36000,101023:12|10:60000,101033:6|10:120000,101033:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_B_Common_04_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12005, + "CodeName": "Weapon_B_Common_05", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 30502, + "Value": 1600 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_05", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_05", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101013:2|10:16800,101023:7|10:36000,101023:12|10:60000,101033:6|10:120000,101033:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_B_Common_05_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12006, + "CodeName": "Weapon_B_Common_06", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 11102, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_06", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_06", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101013:2|10:16800,101023:7|10:36000,101023:12|10:60000,101033:6|10:120000,101033:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_B_Common_06_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12007, + "CodeName": "Weapon_B_Common_07", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 12102, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_07", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_07", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101011:2|10:16800,101021:7|10:36000,101021:12|10:60000,101031:6|10:120000,101031:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_B_Common_07_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12008, + "CodeName": "Weapon_B_Common_08", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 12202, + "Value": 480 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_08", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_08", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101011:2|10:16800,101021:7|10:36000,101021:12|10:60000,101031:6|10:120000,101031:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_B_Common_08_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12009, + "CodeName": "Weapon_B_Common_09", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 30502, + "Value": 1600 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_09", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_09", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101011:2|10:16800,101021:7|10:36000,101021:12|10:60000,101031:6|10:120000,101031:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_B_Common_09_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12010, + "CodeName": "Weapon_B_Common_10", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 12102, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_10", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_10", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101012:2|10:16800,101022:7|10:36000,101022:12|10:60000,101032:6|10:120000,101032:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_B_Common_10_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12011, + "CodeName": "Weapon_B_Common_11", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 31203, + "Value": 24 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_11", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_11", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101012:2|10:16800,101022:7|10:36000,101022:12|10:60000,101032:6|10:120000,101032:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_B_Common_11_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12012, + "CodeName": "Weapon_B_Common_12", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 23103, + "Value": 640 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_12", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_12", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101012:2|10:16800,101022:7|10:36000,101022:12|10:60000,101032:6|10:120000,101032:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_B_Common_12_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12013, + "CodeName": "Weapon_B_Common_13", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 13102, + "Value": 1280 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_13", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_13", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101014:2|10:16800,101024:7|10:36000,101024:12|10:60000,101034:6|10:120000,101034:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_B_Common_13_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 12014, + "CodeName": "Weapon_B_Common_14", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 32 + }, + "RandProperty": { + "Property": 13102, + "Value": 1280 + }, + "StarLimit": 4, + "ExpRecycle": 300, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_B_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_B_Common_14", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_B_Common_14", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:7200,101014:2|10:16800,101024:7|10:36000,101024:12|10:60000,101034:6|10:120000,101034:12", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_B_Common_14_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13001, + "CodeName": "Weapon_A_Common_01", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_01", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_01", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_01", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101010:3|10:22400,101020:10|10:48000,101020:16|10:80000,101030:8|10:160000,101030:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_A_Common_01_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13002, + "CodeName": "Weapon_A_Common_02", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 23103, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_02", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_02", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_02", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101013:3|10:22400,101023:10|10:48000,101023:16|10:80000,101033:8|10:160000,101033:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_A_Common_02_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13003, + "CodeName": "Weapon_A_Common_03", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 31203, + "Value": 30 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_03", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_03", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_03", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101012:3|10:22400,101022:10|10:48000,101022:16|10:80000,101032:8|10:160000,101032:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_A_Common_03_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13004, + "CodeName": "Weapon_A_Common_04", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_04", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_04", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_04", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101010:3|10:22400,101020:10|10:48000,101020:16|10:80000,101030:8|10:160000,101030:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_A_Common_04_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13005, + "CodeName": "Weapon_A_Common_05", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 30502, + "Value": 2000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_05", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_05", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_05", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101011:3|10:22400,101021:10|10:48000,101021:16|10:80000,101031:8|10:160000,101031:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_A_Common_05_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13006, + "CodeName": "Weapon_A_Common_06", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12202, + "Value": 600 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_06", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_06", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101011:3|10:22400,101021:10|10:48000,101021:16|10:80000,101031:8|10:160000,101031:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_A_Common_06_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13007, + "CodeName": "Weapon_A_Common_07", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 11102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_07", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_07", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_07", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101014:3|10:22400,101024:10|10:48000,101024:16|10:80000,101034:8|10:160000,101034:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_A_Common_07_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13008, + "CodeName": "Weapon_A_Common_08", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_08", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_08", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101012:3|10:22400,101022:10|10:48000,101022:16|10:80000,101032:8|10:160000,101032:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_A_Common_08_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13009, + "CodeName": "Weapon_A_Common_09", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 31203, + "Value": 30 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_09", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_09", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_09", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101012:3|10:22400,101022:10|10:48000,101022:16|10:80000,101032:8|10:160000,101032:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_A_Common_09_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13010, + "CodeName": "Weapon_A_Common_10", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 13102, + "Value": 1600 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_10", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_10", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_10", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101014:3|10:22400,101024:10|10:48000,101024:16|10:80000,101034:8|10:160000,101034:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_A_Common_10_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13011, + "CodeName": "Weapon_A_Common_11", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common_11", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_11", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_11", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101014:3|10:22400,101024:10|10:48000,101024:16|10:80000,101034:8|10:160000,101034:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_A_Common_11_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13013, + "CodeName": "Weapon_A_Common_13", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_Common", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_Common_13", + "NGDEOGDBFEB": 0, + "GMAKJBPAACK": "Weapon/Weapon_A_Common_13", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101013:3|10:22400,101023:10|10:48000,101023:16|10:80000,101033:8|10:160000,101033:16", + "JHLGOMEOANO": 307001, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_A_Common_13_Desc", + "DBIIAEFJHDA": "Weapon_13013_Activity", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 13101, + "CodeName": "Weapon_A_1011", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 12202, + "Value": 600 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1011", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1011", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1011", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101011:3|10:22400,101021:10|10:48000,101021:16|10:80000,101031:8|10:160000,101031:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_A_1011_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1011, + "BLGOKKBDIOO": "Weapon_A_1011_Comment" + }, + { + "ItemID": 13103, + "CodeName": "Weapon_A_1031", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 30502, + "Value": 2000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1031", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1031", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1031", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101013:3|10:22400,101023:10|10:48000,101023:16|10:80000,101033:8|10:160000,101033:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_A_1031_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1031, + "BLGOKKBDIOO": "Weapon_A_1031_Comment" + }, + { + "ItemID": 13106, + "CodeName": "Weapon_A_1061", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1061", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1061", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1061", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101010:3|10:22400,101020:10|10:48000,101020:16|10:80000,101030:8|10:160000,101030:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_A_1061_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1061, + "BLGOKKBDIOO": "Weapon_A_1061_Comment" + }, + { + "ItemID": 13108, + "CodeName": "Weapon_A_1081", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1081", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1081", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1081", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101010:3|10:22400,101020:10|10:48000,101020:16|10:80000,101030:8|10:160000,101030:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_A_1081_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1081, + "BLGOKKBDIOO": "Weapon_A_1081_Comment" + }, + { + "ItemID": 13111, + "CodeName": "Weapon_A_1111", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 30502, + "Value": 2000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1111", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1111", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1111", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101010:3|10:22400,101020:10|10:48000,101020:16|10:80000,101030:8|10:160000,101030:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_A_1111_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1111, + "BLGOKKBDIOO": "Weapon_A_1111_Comment" + }, + { + "ItemID": 13112, + "CodeName": "Weapon_A_1121", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 13102, + "Value": 1600 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1121", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1121", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1121", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101014:3|10:22400,101024:10|10:48000,101024:16|10:80000,101034:8|10:160000,101034:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_A_1121_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1121, + "BLGOKKBDIOO": "Weapon_A_1121_Comment" + }, + { + "ItemID": 13113, + "CodeName": "Weapon_A_1131", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1131", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1131", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1131", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101013:3|10:22400,101023:10|10:48000,101023:16|10:80000,101033:8|10:160000,101033:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_A_1131_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1131, + "BLGOKKBDIOO": "Weapon_A_1131_Comment" + }, + { + "ItemID": 13115, + "CodeName": "Weapon_A_1151", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 30502, + "Value": 2000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1151", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1151", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1151", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101013:3|10:22400,101023:10|10:48000,101023:16|10:80000,101033:8|10:160000,101033:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_A_1151_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1151, + "BLGOKKBDIOO": "Weapon_A_1151_Comment" + }, + { + "ItemID": 13127, + "CodeName": "Weapon_A_1271", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1271", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1271", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1271", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101014:3|10:22400,101024:10|10:48000,101024:16|10:80000,101034:8|10:160000,101034:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 5, + "EIOJNNOAENK": "Item_Weapon_A_1271_Desc", + "DBIIAEFJHDA": "Jane_Seth_release", + "GDHEDCOCFAF": "", + "AvatarID": 1271, + "BLGOKKBDIOO": "Weapon_A_1271_Comment" + }, + { + "ItemID": 13128, + "CodeName": "Weapon_A_1281", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 42 + }, + "RandProperty": { + "Property": 12102, + "Value": 1000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_A_1281", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_A_1281", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_A_1281", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101012:3|10:22400,101022:10|10:48000,101022:16|10:80000,101032:8|10:160000,101032:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_A_1281_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1281, + "BLGOKKBDIOO": "Weapon_A_1281_Comment" + }, + { + "ItemID": 14001, + "CodeName": "Weapon_S_Common_01", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 20103, + "Value": 800 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_Common_01", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_Common_01", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_Common_01", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101010:3|10:22400,101020:10|10:48000,101020:16|10:80000,101030:8|10:160000,101030:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_S_Common_01_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 14002, + "CodeName": "Weapon_S_Common_02", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 30502, + "Value": 2000 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_Common_02", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_Common_02", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_Common_02", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101013:3|10:22400,101023:10|10:48000,101023:16|10:80000,101033:8|10:160000,101033:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_S_Common_02_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 14003, + "CodeName": "Weapon_S_Common_03", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 40 + }, + "RandProperty": { + "Property": 12202, + "Value": 600 + }, + "StarLimit": 4, + "ExpRecycle": 6000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_Common_03", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_Common_03", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_Common_03", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 1500 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:9600,101011:3|10:22400,101021:10|10:48000,101021:16|10:80000,101031:8|10:160000,101031:16", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_S_Common_03_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 0, + "BLGOKKBDIOO": "" + }, + { + "ItemID": 14102, + "CodeName": "Weapon_S_1021", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 46 + }, + "RandProperty": { + "Property": 20103, + "Value": 960 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1021", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1021", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1021", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101010:4|10:28000,101020:12|10:60000,101020:20|10:100000,101030:10|10:200000,101030:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_S_1021_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1021, + "BLGOKKBDIOO": "Weapon_S_1021_Comment" + }, + { + "ItemID": 14104, + "CodeName": "Weapon_S_1041", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 46 + }, + "RandProperty": { + "Property": 12102, + "Value": 1200 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1041", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1041", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1041", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101010:4|10:28000,101020:12|10:60000,101020:20|10:100000,101030:10|10:200000,101030:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_S_1041_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1041, + "BLGOKKBDIOO": "Weapon_S_1041_Comment" + }, + { + "ItemID": 14110, + "CodeName": "Weapon_S_1101", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 46 + }, + "RandProperty": { + "Property": 12202, + "Value": 720 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1101", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1101", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1101", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101011:4|10:28000,101021:12|10:60000,101021:20|10:100000,101031:10|10:200000,101031:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_S_1101_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1101, + "BLGOKKBDIOO": "Weapon_S_1101_Comment" + }, + { + "ItemID": 14114, + "CodeName": "Weapon_S_1141", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 46 + }, + "RandProperty": { + "Property": 12202, + "Value": 720 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1141", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1141", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1141", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101011:4|10:28000,101021:12|10:60000,101021:20|10:100000,101031:10|10:200000,101031:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_S_1141_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1141, + "BLGOKKBDIOO": "Weapon_S_1141_Comment" + }, + { + "ItemID": 14118, + "CodeName": "Weapon_S_1181", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 46 + }, + "RandProperty": { + "Property": 23103, + "Value": 960 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1181", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1181", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1181", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101012:4|10:28000,101022:12|10:60000,101022:20|10:100000,101032:10|10:200000,101032:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_S_1181_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1181, + "BLGOKKBDIOO": "Weapon_S_1181_Comment" + }, + { + "ItemID": 14119, + "CodeName": "Weapon_S_1191", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 48 + }, + "RandProperty": { + "Property": 20103, + "Value": 960 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1191", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1191", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1191", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101010:4|10:28000,101020:12|10:60000,101020:20|10:100000,101030:10|10:200000,101030:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_S_1191_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1191, + "BLGOKKBDIOO": "Weapon_S_1191_Comment" + }, + { + "ItemID": 14121, + "CodeName": "Weapon_S_1211", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 46 + }, + "RandProperty": { + "Property": 23103, + "Value": 960 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1211", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1211", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1211", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101013:4|10:28000,101023:12|10:60000,101023:20|10:100000,101033:10|10:200000,101033:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 4, + "EIOJNNOAENK": "Item_Weapon_S_1211_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1211, + "BLGOKKBDIOO": "Weapon_S_1211_Comment" + }, + { + "ItemID": 14124, + "CodeName": "Weapon_S_1241", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 48 + }, + "RandProperty": { + "Property": 21103, + "Value": 1920 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1241", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1241", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1241", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101010:4|10:28000,101020:12|10:60000,101020:20|10:100000,101030:10|10:200000,101030:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 1, + "EIOJNNOAENK": "Item_Weapon_S_1241_Desc", + "DBIIAEFJHDA": "zhuyuan_release", + "GDHEDCOCFAF": "", + "AvatarID": 1241, + "BLGOKKBDIOO": "Weapon_S_1241_Comment" + }, + { + "ItemID": 14125, + "CodeName": "Weapon_S_1251", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 48 + }, + "RandProperty": { + "Property": 12202, + "Value": 720 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1251", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1251", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1251", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101011:4|10:28000,101021:12|10:60000,101021:20|10:100000,101031:10|10:200000,101031:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 2, + "EIOJNNOAENK": "Item_Weapon_S_1251_Desc", + "DBIIAEFJHDA": "", + "GDHEDCOCFAF": "", + "AvatarID": 1251, + "BLGOKKBDIOO": "Weapon_S_1251_Comment" + }, + { + "ItemID": 14126, + "CodeName": "Weapon_S_1261", + "Type": 0, + "BaseProperty": { + "Property": 12101, + "Value": 48 + }, + "RandProperty": { + "Property": 31203, + "Value": 36 + }, + "StarLimit": 4, + "ExpRecycle": 30000, + "MHMEHIJKLEE": "Data/ScriptConfig/Character/Weapon_S_1261", + "HDIMACEAHAO": "UI/3D/Weapon/Weapon_S_1261", + "NGDEOGDBFEB": 1, + "GMAKJBPAACK": "Weapon/Weapon_S_1261", + "RefineCosts": [ + { + "ItemID": 10, + "Number": 2000 + } + ], + "RefineInitial": 1, + "RefineLimit": 5, + "EPPLIFAMAEJ": 0, + "IOGIHONJOMF": 0, + "CHFEMALKLBL": "10:12000,101012:4|10:28000,101022:12|10:60000,101022:20|10:100000,101032:10|10:200000,101032:20", + "JHLGOMEOANO": 0, + "LJONANJGEOI": 3, + "EIOJNNOAENK": "Item_Weapon_S_1261_Desc", + "DBIIAEFJHDA": "Jane_Seth_release", + "GDHEDCOCFAF": "", + "AvatarID": 1261, + "BLGOKKBDIOO": "Weapon_S_1261_Comment" + } +] diff --git a/nap_data/src/tables/mod.rs b/nap_data/src/tables/mod.rs index ba3a498..9ad808c 100644 --- a/nap_data/src/tables/mod.rs +++ b/nap_data/src/tables/mod.rs @@ -43,4 +43,5 @@ template_tables! { ProcedureConfigTemplate; PostGirlConfigTemplate; TrainingQuestTemplate; + WeaponTemplate; } diff --git a/nap_data/src/tables/weapon_template.rs b/nap_data/src/tables/weapon_template.rs new file mode 100644 index 0000000..46e540a --- /dev/null +++ b/nap_data/src/tables/weapon_template.rs @@ -0,0 +1,34 @@ +use serde::Deserialize; + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "PascalCase")] +pub struct WeaponTemplate { + #[serde(rename = "ItemID")] + pub item_id: u32, + pub code_name: String, + #[serde(rename = "Type")] + pub weapon_type: u32, + pub base_property: IntPropertyIntValue, + pub rand_property: IntPropertyIntValue, + pub star_limit: u32, + pub exp_recycle: u32, + pub refine_costs: Vec, + pub refine_initial: u32, + pub refine_limit: u32, +} + +// nice names, mihoyo +#[derive(Deserialize, Debug)] +#[serde(rename_all = "PascalCase")] +pub struct IntPropertyIntValue { + pub property: u32, + pub value: i32, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "PascalCase")] +pub struct IntItemIDIntNumber { + #[serde(rename = "ItemID")] + pub item_id: u32, + pub number: u32, +} diff --git a/nap_gameserver/src/commands/avatar.rs b/nap_gameserver/src/commands/avatar.rs index d137d84..c4af5ca 100644 --- a/nap_gameserver/src/commands/avatar.rs +++ b/nap_gameserver/src/commands/avatar.rs @@ -3,7 +3,12 @@ use proto::{AddAvatarPerformType, AddAvatarScNotify, PlayerSyncScNotify}; use crate::ServerState; -pub async fn add(args: &[&str], state: &ServerState) -> Result> { +use super::ArgSlice; + +pub async fn add( + args: ArgSlice<'_>, + state: &ServerState, +) -> Result> { const USAGE: &str = "Usage: avatar add [player_uid] [avatar_id]"; if args.len() != 2 { diff --git a/nap_gameserver/src/commands/item.rs b/nap_gameserver/src/commands/item.rs new file mode 100644 index 0000000..13216d5 --- /dev/null +++ b/nap_gameserver/src/commands/item.rs @@ -0,0 +1,52 @@ +use data::tables; +use proto::PlayerSyncScNotify; + +use crate::ServerState; + +use super::ArgSlice; + +pub async fn add_weapon( + args: ArgSlice<'_>, + state: &ServerState, +) -> Result> { + const USAGE: &str = "Usage: item add_weapon [player_uid] [weapon_id]"; + + if args.len() != 2 { + return Ok(USAGE.to_string()); + } + + let uid = args[0].parse::()?; + let weapon_id = args[1].parse::()?; + + if !tables::weapon_template_tb::iter().any(|tmpl| tmpl.item_id == weapon_id) { + return Ok(format!("weapon with id {weapon_id} doesn't exist")); + } + + let Some(player_lock) = state.player_mgr.get_player(uid).await else { + return Ok(String::from("player not found")); + }; + + let (session_id, weapon_uid, item_sync) = { + let mut player = player_lock.lock().await; + let uid = player.item_model.add_weapon(weapon_id); + + ( + player.current_session_id(), + uid.value(), + player.item_model.item_sync(), + ) + }; + + if let Some(session) = session_id.map(|id| state.session_mgr.get(id)).flatten() { + session + .notify(PlayerSyncScNotify { + item_sync: Some(item_sync), + ..Default::default() + }) + .await?; + } else { + state.player_mgr.save_and_remove(uid).await; + } + + Ok(format!("successfully added weapon, item uid: {weapon_uid}")) +} diff --git a/nap_gameserver/src/commands/mod.rs b/nap_gameserver/src/commands/mod.rs index 42c87f1..8480297 100644 --- a/nap_gameserver/src/commands/mod.rs +++ b/nap_gameserver/src/commands/mod.rs @@ -6,8 +6,11 @@ use rustyline_async::{Readline, ReadlineEvent, SharedWriter}; use crate::ServerState; mod avatar; +mod item; mod player; +type ArgSlice<'a> = &'a [&'a str]; + pub struct CommandManager { state: Arc, } @@ -83,5 +86,6 @@ impl CommandManager { player::nickname "[player_uid] [nickname]" "changes player nickname"; player::procedure "[player_uid] [procedure_id]" "changes current beginner procedure id, parameter -1 can be used for skipping it"; avatar::add "[player_uid] [avatar_id]" "gives avatar with specified id to player"; + item::add_weapon "[player_uid] [weapon_id]" "gives weapon with specified id to player"; } } diff --git a/nap_gameserver/src/commands/player.rs b/nap_gameserver/src/commands/player.rs index 812a875..bb2c89a 100644 --- a/nap_gameserver/src/commands/player.rs +++ b/nap_gameserver/src/commands/player.rs @@ -3,8 +3,10 @@ use proto::PlayerSyncScNotify; use crate::ServerState; +use super::ArgSlice; + pub async fn avatar( - args: &[&str], + args: ArgSlice<'_>, state: &ServerState, ) -> Result> { const USAGE: &str = "Usage: player avatar [player_uid] [avatar_id]"; @@ -40,7 +42,7 @@ pub async fn avatar( } pub async fn nickname( - args: &[&str], + args: ArgSlice<'_>, state: &ServerState, ) -> Result> { const USAGE: &str = "Usage: player nickname [uid] [nickname]"; @@ -89,7 +91,7 @@ pub async fn nickname( } pub async fn procedure( - args: &[&str], + args: ArgSlice<'_>, state: &ServerState, ) -> Result> { const USAGE: &str = "Usage: player procedure [uid] [procedure_id]"; diff --git a/nap_gameserver/src/handlers/item.rs b/nap_gameserver/src/handlers/item.rs index d68246e..9dbd0a1 100644 --- a/nap_gameserver/src/handlers/item.rs +++ b/nap_gameserver/src/handlers/item.rs @@ -10,6 +10,53 @@ pub async fn on_get_item_data( Ok(GetItemDataScRsp { retcode: Retcode::RetSucc.into(), resource_list: item_model.resources.iter().map(|i| i.to_client()).collect(), + weapon_list: item_model.weapons.iter().map(|w| w.to_client()).collect(), ..Default::default() }) } + +pub async fn on_weapon_dress( + session: &NetSession, + player: &mut Player, + req: WeaponDressCsReq, +) -> NetResult { + player.dress_weapon(req.avatar_id, req.weapon_uid.into())?; + + session + .notify(PlayerSyncScNotify { + avatar: Some(player.role_model.avatar_sync()), + item_sync: Some(player.item_model.item_sync()), + ..Default::default() + }) + .await?; + + Ok(WeaponDressScRsp { + retcode: Retcode::RetSucc.into(), + }) +} + +pub async fn on_weapon_un_dress( + session: &NetSession, + player: &mut Player, + req: WeaponUnDressCsReq, +) -> NetResult { + let avatar = player + .role_model + .avatar_list + .iter_mut() + .find(|a| a.template_id == req.avatar_id) + .ok_or(Retcode::RetFail)?; + + avatar.weapon_uid = None; + + session + .notify(PlayerSyncScNotify { + avatar: Some(player.role_model.avatar_sync()), + ..Default::default() + }) + .await?; + + Ok(WeaponUnDressScRsp { + retcode: Retcode::RetSucc.into(), + }) +} diff --git a/nap_gameserver/src/handlers/mod.rs b/nap_gameserver/src/handlers/mod.rs index 273923d..5383207 100644 --- a/nap_gameserver/src/handlers/mod.rs +++ b/nap_gameserver/src/handlers/mod.rs @@ -109,6 +109,8 @@ req_handlers! { misc::GetServerTimestamp; misc::GetCutSceneKeyInfo; embattles::ReportBattleTeam; + item::WeaponDress; + item::WeaponUnDress; } notify_handlers! { diff --git a/nap_gameserver/src/logic/item/item_model.rs b/nap_gameserver/src/logic/item/item_model.rs index 02ffb40..eb35ce6 100644 --- a/nap_gameserver/src/logic/item/item_model.rs +++ b/nap_gameserver/src/logic/item/item_model.rs @@ -1,24 +1,30 @@ -use super::ResourceItem; -use proto::ItemModelBin; +use super::{ItemUID, ResourceItem, Weapon}; +use proto::{ItemModelBin, ItemSync}; pub struct ItemModel { + uid_counter: u32, pub resources: Vec, + pub weapons: Vec, } impl ItemModel { pub fn from_bin(bin: ItemModelBin) -> Self { Self { + uid_counter: bin.item_uid_counter, resources: bin .resource_list .into_iter() .map(ResourceItem::from_bin) .collect(), + weapons: bin.weapon_list.into_iter().map(Weapon::from_bin).collect(), } } pub fn to_bin(&self) -> ItemModelBin { ItemModelBin { + item_uid_counter: self.uid_counter, resource_list: self.resources.iter().map(ResourceItem::to_bin).collect(), + weapon_list: self.weapons.iter().map(Weapon::to_bin).collect(), } } @@ -36,12 +42,34 @@ impl ItemModel { }); } } + + pub fn add_weapon(&mut self, template_id: u32) -> ItemUID { + let uid = self.next_uid(); + self.weapons.push(Weapon::new(template_id, uid)); + + uid + } + + pub fn item_sync(&self) -> ItemSync { + ItemSync { + resource_list: self.resources.iter().map(|i| i.to_client()).collect(), + weapon_list: self.weapons.iter().map(|w| w.to_client()).collect(), + ..Default::default() + } + } + + fn next_uid(&mut self) -> ItemUID { + self.uid_counter += 1; + self.uid_counter.into() + } } impl Default for ItemModel { fn default() -> Self { Self { + uid_counter: 0, resources: Vec::new(), + weapons: Vec::new(), } } } diff --git a/nap_gameserver/src/logic/item/mod.rs b/nap_gameserver/src/logic/item/mod.rs index a427a17..07125fa 100644 --- a/nap_gameserver/src/logic/item/mod.rs +++ b/nap_gameserver/src/logic/item/mod.rs @@ -1,5 +1,22 @@ mod item_model; mod resource; +mod weapon; pub use item_model::ItemModel; pub use resource::ResourceItem; +pub use weapon::Weapon; + +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +pub struct ItemUID(u32); + +impl ItemUID { + pub fn value(&self) -> u32 { + self.0 + } +} + +impl From for ItemUID { + fn from(value: u32) -> Self { + Self(value) + } +} diff --git a/nap_gameserver/src/logic/item/weapon.rs b/nap_gameserver/src/logic/item/weapon.rs new file mode 100644 index 0000000..b7e139c --- /dev/null +++ b/nap_gameserver/src/logic/item/weapon.rs @@ -0,0 +1,66 @@ +use super::ItemUID; + +use data::tables::{self, WeaponTemplate}; +use proto::{WeaponBin, WeaponInfo}; + +pub struct Weapon { + pub uid: ItemUID, + pub template_id: u32, + pub star: u32, + pub level: u32, + pub exp: u32, + pub refine_level: u32, +} + +impl Weapon { + pub fn new(template_id: u32, uid: ItemUID) -> Self { + let template = Self::get_template(template_id).unwrap(); + + Self { + template_id, + uid, + level: (template.star_limit + 1) * 10, + star: template.star_limit, + refine_level: template.refine_limit, + exp: 0, + } + } + + pub fn from_bin(bin: WeaponBin) -> Self { + Self { + template_id: bin.template_id, + uid: bin.uid.into(), + star: bin.star, + level: bin.level, + exp: bin.exp, + refine_level: bin.refine_level, + } + } + + pub fn to_bin(&self) -> WeaponBin { + WeaponBin { + template_id: self.template_id, + uid: self.uid.value(), + star: self.star, + level: self.level, + exp: self.exp, + refine_level: self.refine_level, + } + } + + pub fn to_client(&self) -> WeaponInfo { + WeaponInfo { + template_id: self.template_id, + uid: self.uid.value(), + star: self.star, + level: self.level, + exp: self.exp, + refine_level: self.refine_level, + ..Default::default() + } + } + + fn get_template(template_id: u32) -> Option<&'static WeaponTemplate> { + tables::weapon_template_tb::iter().find(|tmpl| tmpl.item_id == template_id) + } +} diff --git a/nap_gameserver/src/logic/player/player.rs b/nap_gameserver/src/logic/player/player.rs index 3336b34..cdd1519 100644 --- a/nap_gameserver/src/logic/player/player.rs +++ b/nap_gameserver/src/logic/player/player.rs @@ -2,7 +2,7 @@ use data::tables; use proto::{ItemStatic, PlayerDataBin, Retcode}; use super::game::{FrontendGame, GameInstance, LogicError}; -use super::item::ItemModel; +use super::item::{ItemModel, ItemUID}; use super::main_city_model::MainCityModel; use super::role::RoleModel; use super::{BasicDataModel, LockModel}; @@ -90,6 +90,31 @@ impl Player { Ok(()) } + pub fn dress_weapon(&mut self, avatar_id: u32, weapon_uid: ItemUID) -> Result<(), Retcode> { + self.item_model + .weapons + .iter() + .any(|w| w.uid == weapon_uid) + .then_some(()) + .ok_or(Retcode::RetFail)?; + + self.role_model + .avatar_list + .iter_mut() + .filter(|a| a.weapon_uid.map(|u| u.value()).unwrap_or_default() == weapon_uid.value()) + .for_each(|a| a.weapon_uid = None); + + let avatar = self + .role_model + .avatar_list + .iter_mut() + .find(|a| a.template_id == avatar_id) + .ok_or(Retcode::RetFail)?; + + avatar.weapon_uid = Some(weapon_uid); + Ok(()) + } + pub fn set_current_session(&mut self, id: u64) { self.current_session_id = Some(id); } diff --git a/nap_gameserver/src/logic/role/avatar.rs b/nap_gameserver/src/logic/role/avatar.rs index cbd2ff9..715f5c4 100644 --- a/nap_gameserver/src/logic/role/avatar.rs +++ b/nap_gameserver/src/logic/role/avatar.rs @@ -1,5 +1,7 @@ use proto::{AvatarBin, AvatarInfo, AvatarSkillInfo}; +use crate::logic::item::ItemUID; + use super::AvatarSkill; pub const AVATAR_TALENT_COUNT: usize = 6; @@ -10,6 +12,7 @@ pub struct Avatar { pub star: u32, pub rank: u32, pub unlocked_talent_num: u32, + pub weapon_uid: Option, pub skill_list: Vec, pub talent_switch: [bool; AVATAR_TALENT_COUNT], } @@ -23,6 +26,7 @@ impl Avatar { star: 0, rank: 6, unlocked_talent_num: 6, + weapon_uid: None, skill_list: (0..=6) .map(|st| AvatarSkill { skill_type: st, @@ -41,6 +45,7 @@ impl Avatar { star: bin.star, rank: bin.rank, unlocked_talent_num: bin.unlocked_talent_num, + weapon_uid: (bin.weapon_uid != 0).then_some(bin.weapon_uid.into()), skill_list: bin .avatar_skill_list .into_iter() @@ -61,6 +66,7 @@ impl Avatar { star: self.star, rank: self.rank, unlocked_talent_num: self.unlocked_talent_num, + weapon_uid: self.weapon_uid.map(|u| u.value()).unwrap_or_default(), avatar_skill_list: self.skill_list.iter().map(AvatarSkill::to_bin).collect(), talent_switch_list: self.talent_switch.to_vec(), } @@ -82,6 +88,7 @@ impl Avatar { rank: self.rank, talent_switch_list: self.talent_switch.to_vec(), unlocked_talent_num: self.unlocked_talent_num, + cur_weapon_uid: self.weapon_uid.map(|u| u.value()).unwrap_or_default(), ..Default::default() } } diff --git a/nap_proto/out/_.rs b/nap_proto/out/_.rs index 9120023..c973470 100644 --- a/nap_proto/out/_.rs +++ b/nap_proto/out/_.rs @@ -2264,7 +2264,7 @@ pub struct PlayerSyncScNotify { #[prost(message, optional, tag = "9")] pub oalcbialjcp: ::core::option::Option, #[prost(message, optional, tag = "10")] - pub pofnfakeaif: ::core::option::Option, + pub item_sync: ::core::option::Option, #[prost(message, optional, tag = "11")] pub ncfafdpojjh: ::core::option::Option, #[prost(message, optional, tag = "12")] @@ -7521,7 +7521,7 @@ pub struct Mjcibhpoogl {} #[derive(proto_gen::XorFields)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Mdilomeanog { +pub struct WeaponInfo { #[xor(8461)] #[prost(uint32, tag = "1")] pub star: u32, @@ -7541,7 +7541,7 @@ pub struct Mdilomeanog { pub uid: u32, #[xor(14552)] #[prost(uint32, tag = "9")] - pub imedhbicngp: u32, + pub refine_level: u32, #[prost(bool, tag = "6")] pub omockkcjpgk: bool, } @@ -11186,7 +11186,7 @@ pub struct Ndpkppjmine { #[derive(proto_gen::XorFields)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Iakibnbffhf { +pub struct WeaponUnDressCsReq { #[xor(1124)] #[prost(uint32, tag = "11")] pub avatar_id: u32, @@ -13724,7 +13724,7 @@ pub struct Omdfkjoopce { pub amhnddiknek: u32, #[xor(3813)] #[prost(uint32, tag = "14")] - pub ekdhfcplchk: u32, + pub weapon_uid: u32, } #[derive(proto_gen::CmdID)] #[cmdid(1021)] @@ -14032,7 +14032,7 @@ pub struct Nffblkigaan { pub mpojmpolhlp: ::prost::alloc::vec::Vec, #[xor(2070)] #[prost(uint32, tag = "11")] - pub ekdhfcplchk: u32, + pub weapon_uid: u32, #[xor(2492)] #[prost(uint32, tag = "9")] pub eijhjbplhih: u32, @@ -15826,7 +15826,7 @@ pub struct Ekmmggfgijn { #[prost(message, repeated, tag = "13")] pub avatar_list: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "14")] - pub gpdcidjenda: ::prost::alloc::vec::Vec, + pub weapon_list: ::prost::alloc::vec::Vec, } #[derive(proto_gen::CmdID)] #[derive(proto_gen::XorFields)] @@ -16482,7 +16482,7 @@ pub struct DungeonItemData { #[prost(uint32, tag = "5")] pub gebpmceiane: u32, #[prost(message, repeated, tag = "13")] - pub gpdcidjenda: ::prost::alloc::vec::Vec, + pub weapon_list: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "11")] pub gonbpdlffco: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "6")] @@ -18485,7 +18485,7 @@ pub struct Mdpcbogenpf { #[derive(proto_gen::XorFields)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Bleckcnpkej { +pub struct ItemSync { #[prost(message, optional, tag = "1")] pub jgifpnjbbcp: ::core::option::Option, #[prost(uint32, repeated, tag = "2")] @@ -18493,7 +18493,7 @@ pub struct Bleckcnpkej { #[prost(uint32, repeated, tag = "5")] pub dffmeljklii: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "6")] - pub gpdcidjenda: ::prost::alloc::vec::Vec, + pub weapon_list: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "7")] pub resource_list: ::prost::alloc::vec::Vec, #[prost(uint32, repeated, tag = "8")] @@ -21415,10 +21415,10 @@ pub struct Bfdmichhlen {} #[derive(proto_gen::XorFields)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Ckgocemenbc { +pub struct WeaponDressCsReq { #[xor(2466)] #[prost(uint32, tag = "15")] - pub ekdhfcplchk: u32, + pub weapon_uid: u32, #[xor(7457)] #[prost(uint32, tag = "13")] pub avatar_id: u32, @@ -22765,7 +22765,7 @@ pub struct GetItemDataScRsp { #[prost(uint32, repeated, tag = "3")] pub ohiggablenk: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "12")] - pub gpdcidjenda: ::prost::alloc::vec::Vec, + pub weapon_list: ::prost::alloc::vec::Vec, #[xor(2897)] #[prost(int32, tag = "5")] pub retcode: i32, @@ -24358,7 +24358,7 @@ pub struct AvatarInfo { pub kjfpeockbjd: ::prost::alloc::vec::Vec, #[xor(3463)] #[prost(uint32, tag = "4")] - pub oafocbpemhm: u32, + pub cur_weapon_uid: u32, #[xor(10519)] #[prost(uint32, tag = "1")] pub level: u32, @@ -29455,7 +29455,7 @@ pub struct Llepiillafj { pub ihgcjhffkdf: u32, #[xor(3151)] #[prost(uint32, tag = "4")] - pub ekdhfcplchk: u32, + pub weapon_uid: u32, } #[derive(proto_gen::CmdID)] #[derive(proto_gen::XorFields)] @@ -33533,7 +33533,7 @@ pub struct Lolghlmjgko { #[prost(uint32, tag = "5")] pub unlocked_talent_num: u32, #[prost(message, optional, tag = "10")] - pub njacjmicemg: ::core::option::Option, + pub njacjmicemg: ::core::option::Option, } #[derive(proto_gen::CmdID)] #[derive(proto_gen::XorFields)] @@ -34143,7 +34143,7 @@ pub struct Pihldgnlcpl { #[derive(proto_gen::XorFields)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Aihacppgmff { +pub struct WeaponUnDressScRsp { #[xor(1692)] #[prost(int32, tag = "10")] pub retcode: i32, @@ -34287,7 +34287,7 @@ pub struct Pcagcihalmf { #[derive(proto_gen::XorFields)] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct Djghjioiild { +pub struct WeaponDressScRsp { #[xor(4000)] #[prost(int32, tag = "4")] pub retcode: i32, diff --git a/nap_proto/out/bin.rs b/nap_proto/out/bin.rs index c7a1ff9..29587ca 100644 --- a/nap_proto/out/bin.rs +++ b/nap_proto/out/bin.rs @@ -44,6 +44,8 @@ pub struct AvatarBin { pub rank: u32, #[prost(uint32, tag = "6")] pub unlocked_talent_num: u32, + #[prost(uint32, tag = "9")] + pub weapon_uid: u32, #[prost(message, repeated, tag = "7")] pub avatar_skill_list: ::prost::alloc::vec::Vec, #[prost(bool, repeated, tag = "8")] @@ -65,9 +67,29 @@ pub struct ResourceItemBin { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct WeaponBin { + #[prost(uint32, tag = "1")] + pub template_id: u32, + #[prost(uint32, tag = "2")] + pub uid: u32, + #[prost(uint32, tag = "3")] + pub level: u32, + #[prost(uint32, tag = "4")] + pub exp: u32, + #[prost(uint32, tag = "5")] + pub star: u32, + #[prost(uint32, tag = "6")] + pub refine_level: u32, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ItemModelBin { #[prost(message, repeated, tag = "1")] pub resource_list: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag = "2")] + pub weapon_list: ::prost::alloc::vec::Vec, + #[prost(uint32, tag = "10")] + pub item_uid_counter: u32, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)]