RandomPresetContent.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using UnityEngine;
  5. public class RandomPresetContent
  6. {
  7. public static Dictionary<string, RandomPresetContent.CSVData> dicCsvData { get; set; }
  8. public static Dictionary<MPN, RandomPresetContent.MPNMapping> m_dicMPNMapping
  9. {
  10. get
  11. {
  12. if (RandomPresetContent.m_dicMPNMapping_ == null)
  13. {
  14. Dictionary<MPN, SceneEditInfo.CCateNameType> dicPartsTypePair = SceneEditInfo.m_dicPartsTypePair;
  15. string text = "random_preset_mpn_map.nei";
  16. RandomPresetContent.m_dicMPNMapping_ = new Dictionary<MPN, RandomPresetContent.MPNMapping>();
  17. using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text))
  18. {
  19. using (CsvParser csvParser = new CsvParser())
  20. {
  21. bool condition = csvParser.Open(afileBase);
  22. NDebug.Assert(condition, text + "\nopen failed.");
  23. for (int i = 1; i < csvParser.max_cell_y; i++)
  24. {
  25. if (csvParser.IsCellToExistData(0, i))
  26. {
  27. RandomPresetContent.MPNMapping mpnmapping = new RandomPresetContent.MPNMapping();
  28. int num = 0;
  29. MPN key = MPN.null_mpn;
  30. try
  31. {
  32. key = (MPN)Enum.Parse(typeof(MPN), csvParser.GetCellAsString(num++, i));
  33. }
  34. catch (Exception e)
  35. {
  36. NDebug.AssertParseError("MPN", e);
  37. }
  38. mpnmapping.m_buttonName = csvParser.GetCellAsString(num++, i);
  39. SceneEditInfo.CCateNameType ccateNameType;
  40. if (dicPartsTypePair.TryGetValue(key, out ccateNameType))
  41. {
  42. mpnmapping.m_buttonTitle = ccateNameType.m_strBtnPartsTypeName;
  43. if (RandomPresetContent.m_dicMPNMapping_.ContainsKey(key))
  44. {
  45. NDebug.Assert(text + "\n" + key.ToString() + "が重複しています", false);
  46. }
  47. RandomPresetContent.m_dicMPNMapping_.Add(key, mpnmapping);
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }
  54. return RandomPresetContent.m_dicMPNMapping_;
  55. }
  56. }
  57. public void InitRandomPresetParamter()
  58. {
  59. if (!this.LoadParameterSheet())
  60. {
  61. return;
  62. }
  63. this.InitExecutionOrder();
  64. this.InitRandomBaseGroup();
  65. this.InitBodyBase();
  66. this.InitRandomMapping();
  67. this.InitExceptionPartMapping();
  68. this.InitPriorityPartMapping();
  69. this.InitRatioToPutOnItem();
  70. }
  71. private bool LoadParameterSheet()
  72. {
  73. using (AFileBase afileBase = GameUty.FileSystem.FileOpen("random_preset_parameter_define.nei"))
  74. {
  75. using (CsvParser csvParser = new CsvParser())
  76. {
  77. if (!csvParser.Open(afileBase))
  78. {
  79. Debug.LogWarning("csv open failed.\nrandom_preset_parameter_define.nei");
  80. return false;
  81. }
  82. RandomPresetContent.dicCsvData = new Dictionary<string, RandomPresetContent.CSVData>();
  83. this.CreateObjectFromCsv(csvParser);
  84. }
  85. }
  86. return true;
  87. }
  88. private void CreateObjectFromCsv(CsvParser csv)
  89. {
  90. int max_cell_y = csv.max_cell_y;
  91. for (int i = 0; i < max_cell_y; i++)
  92. {
  93. string cellAsString = csv.GetCellAsString(0, i);
  94. if (cellAsString == "*")
  95. {
  96. this.csvData = new RandomPresetContent.CSVData();
  97. string cellAsString2 = csv.GetCellAsString(1, i);
  98. this.csvData.ClassName = cellAsString2;
  99. List<string> list = new List<string>();
  100. List<int> list2 = new List<int>();
  101. int j;
  102. for (j = 0; j < csv.max_cell_x; j++)
  103. {
  104. string cellAsString3 = csv.GetCellAsString(1 + j, i + 2);
  105. if (cellAsString3 == "-")
  106. {
  107. list2.Add(j);
  108. }
  109. else
  110. {
  111. if (string.IsNullOrEmpty(cellAsString3))
  112. {
  113. break;
  114. }
  115. list.Add(cellAsString3);
  116. }
  117. }
  118. this.csvData.Header = list;
  119. Dictionary<int, List<string>> dictionary = new Dictionary<int, List<string>>();
  120. bool flag = false;
  121. for (int k = 1; k < csv.max_cell_y; k++)
  122. {
  123. List<string> list3 = new List<string>();
  124. for (int l = 0; l < j; l++)
  125. {
  126. if (!list2.Contains(l))
  127. {
  128. string cellAsString4 = csv.GetCellAsString(1 + l, i + 2 + k);
  129. if (l == 0 && string.IsNullOrEmpty(cellAsString4))
  130. {
  131. flag = true;
  132. l = list.Count;
  133. break;
  134. }
  135. list3.Add(cellAsString4);
  136. }
  137. }
  138. if (flag)
  139. {
  140. break;
  141. }
  142. dictionary.Add(k, list3);
  143. }
  144. this.csvData.Rows = dictionary;
  145. RandomPresetContent.dicCsvData.Add(this.csvData.ClassName, this.csvData);
  146. }
  147. }
  148. }
  149. private void InitExecutionOrder()
  150. {
  151. RandomPresetContent.ExecutionOrderMasterTable executionOrderMasterTable = new RandomPresetContent.ExecutionOrderMasterTable();
  152. executionOrderMasterTable.Load();
  153. foreach (RandomPresetContent.ExecutionOrder executionOrder in executionOrderMasterTable.All)
  154. {
  155. if (RandomPresetContent.m_dicMPNMapping.ContainsKey(executionOrder.category))
  156. {
  157. RandomPresetContent.m_dicMPNMapping[executionOrder.category].m_executionOrder = executionOrder.order;
  158. }
  159. }
  160. }
  161. private void InitRandomBaseGroup()
  162. {
  163. RandomPresetContent.RandomBaseGroupMasterTable randomBaseGroupMasterTable = new RandomPresetContent.RandomBaseGroupMasterTable();
  164. randomBaseGroupMasterTable.Load();
  165. RandomPresetContent.m_dicRandomBaseGroup = new Dictionary<int, RandomPresetContent.RandomBaseGroup>();
  166. foreach (RandomPresetContent.RandomBaseGroup randomBaseGroup in randomBaseGroupMasterTable.All)
  167. {
  168. RandomPresetContent.m_dicRandomBaseGroup.Add(randomBaseGroup.randomBaseGroupId, randomBaseGroup);
  169. }
  170. }
  171. private void InitBodyBase()
  172. {
  173. RandomPresetContent.BodyBaseMasterTable bodyBaseMasterTable = new RandomPresetContent.BodyBaseMasterTable();
  174. bodyBaseMasterTable.Load();
  175. RandomPresetContent.m_dicBodyBase = new Dictionary<int, RandomPresetContent.BodyBase>();
  176. foreach (RandomPresetContent.BodyBase bodyBase in bodyBaseMasterTable.All)
  177. {
  178. RandomPresetContent.m_dicBodyBase.Add(bodyBase.bodyBaseId, bodyBase);
  179. }
  180. }
  181. private void InitRandomMapping()
  182. {
  183. RandomPresetContent.RandomMappingMasterTable randomMappingMasterTable = new RandomPresetContent.RandomMappingMasterTable();
  184. randomMappingMasterTable.Load();
  185. RandomPresetContent.m_dicRandomMapping = new Dictionary<int, RandomPresetContent.RandomMapping>();
  186. foreach (RandomPresetContent.RandomMapping randomMapping in randomMappingMasterTable.All)
  187. {
  188. RandomPresetContent.m_dicRandomMapping.Add(randomMapping.randomMappingId, randomMapping);
  189. }
  190. foreach (KeyValuePair<int, RandomPresetContent.RandomMapping> keyValuePair in RandomPresetContent.m_dicRandomMapping)
  191. {
  192. RandomPresetContent.RandomBaseGroup randomBaseGroup;
  193. if (RandomPresetContent.m_dicRandomBaseGroup.TryGetValue(keyValuePair.Value.randomBaseGroupId, out randomBaseGroup))
  194. {
  195. RandomPresetContent.BodyBase bodyBase;
  196. if (RandomPresetContent.m_dicBodyBase.TryGetValue(keyValuePair.Value.bodyBaseId, out bodyBase))
  197. {
  198. keyValuePair.Value.randomBaseGroup = randomBaseGroup;
  199. keyValuePair.Value.bodyBase = bodyBase;
  200. }
  201. }
  202. }
  203. }
  204. private void InitExceptionPartMapping()
  205. {
  206. RandomPresetContent.ExceptionPartMappingMasterTable exceptionPartMappingMasterTable = new RandomPresetContent.ExceptionPartMappingMasterTable();
  207. exceptionPartMappingMasterTable.Load();
  208. RandomPresetContent.m_dicExceptionPartMapping = new Dictionary<int, RandomPresetContent.PartMapping>();
  209. foreach (RandomPresetContent.PartMapping partMapping in exceptionPartMappingMasterTable.All)
  210. {
  211. RandomPresetContent.m_dicExceptionPartMapping.Add(partMapping.partMappingId, partMapping);
  212. }
  213. }
  214. private void InitPriorityPartMapping()
  215. {
  216. RandomPresetContent.PriorityPartMappingMasterTable priorityPartMappingMasterTable = new RandomPresetContent.PriorityPartMappingMasterTable();
  217. priorityPartMappingMasterTable.Load();
  218. RandomPresetContent.m_dicPriorityPartMapping = new Dictionary<int, RandomPresetContent.PartMapping>();
  219. foreach (RandomPresetContent.PartMapping partMapping in priorityPartMappingMasterTable.All)
  220. {
  221. RandomPresetContent.m_dicPriorityPartMapping.Add(partMapping.partMappingId, partMapping);
  222. }
  223. }
  224. private void InitRatioToPutOnItem()
  225. {
  226. RandomPresetContent.RatioToPutOnItemMasterTable ratioToPutOnItemMasterTable = new RandomPresetContent.RatioToPutOnItemMasterTable();
  227. ratioToPutOnItemMasterTable.Load();
  228. foreach (RandomPresetContent.RatioToPutOnItem ratioToPutOnItem in ratioToPutOnItemMasterTable.All)
  229. {
  230. if (RandomPresetContent.m_dicMPNMapping.ContainsKey(ratioToPutOnItem.category))
  231. {
  232. RandomPresetContent.m_dicMPNMapping[ratioToPutOnItem.category].m_ratioToPutOn = ratioToPutOnItem.ratioToPutOn;
  233. }
  234. }
  235. }
  236. public static int GetRandomBaseGrpId(int maidPropValue)
  237. {
  238. bool flag = false;
  239. bool flag2 = false;
  240. int num = 0;
  241. if (maidPropValue < RandomPresetContent.m_dicRandomBaseGroup[1].lowerLimit)
  242. {
  243. return RandomPresetContent.m_dicRandomBaseGroup[1].randomBaseGroupId;
  244. }
  245. int count = RandomPresetContent.m_dicRandomBaseGroup.Count;
  246. if (maidPropValue > RandomPresetContent.m_dicRandomBaseGroup[count].upperLimit)
  247. {
  248. return RandomPresetContent.m_dicRandomBaseGroup[count].randomBaseGroupId;
  249. }
  250. foreach (KeyValuePair<int, RandomPresetContent.RandomBaseGroup> keyValuePair in RandomPresetContent.m_dicRandomBaseGroup)
  251. {
  252. if (maidPropValue >= keyValuePair.Value.lowerLimit)
  253. {
  254. flag = true;
  255. }
  256. if (maidPropValue <= keyValuePair.Value.upperLimit)
  257. {
  258. flag2 = true;
  259. }
  260. if (flag && flag2)
  261. {
  262. return keyValuePair.Value.randomBaseGroupId;
  263. }
  264. if (flag2)
  265. {
  266. int num2 = Math.Abs(num - maidPropValue);
  267. int num3 = Math.Abs(keyValuePair.Value.lowerLimit - maidPropValue);
  268. return (num2 <= num3) ? (keyValuePair.Value.randomBaseGroupId - 1) : keyValuePair.Value.randomBaseGroupId;
  269. }
  270. flag = false;
  271. flag2 = false;
  272. num = keyValuePair.Value.upperLimit;
  273. }
  274. return 1;
  275. }
  276. public static string GetButtonNameByMPN(MPN mpn)
  277. {
  278. RandomPresetContent.MPNMapping mpnmapping;
  279. return (!RandomPresetContent.m_dicMPNMapping.TryGetValue(mpn, out mpnmapping)) ? null : mpnmapping.m_buttonName;
  280. }
  281. private void MakeDummyData()
  282. {
  283. SceneEdit component = GameObject.Find("__SceneEdit__").GetComponent<SceneEdit>();
  284. List<SceneEdit.SCategory> categoryList = component.CategoryList;
  285. Texture2D texIconRef = categoryList[1].m_listPartsType[0].m_listMenu[0].m_texIconRef;
  286. }
  287. public static Dictionary<int, RandomPresetContent.RandomBaseGroup> m_dicRandomBaseGroup;
  288. public static Dictionary<int, RandomPresetContent.BodyBase> m_dicBodyBase;
  289. public static Dictionary<int, RandomPresetContent.RandomMapping> m_dicRandomMapping;
  290. public static Dictionary<int, RandomPresetContent.PartMapping> m_dicExceptionPartMapping;
  291. public static Dictionary<int, RandomPresetContent.PartMapping> m_dicPriorityPartMapping;
  292. private const string RANDOMPRESET_PARAMETE_CSV_NAME = "random_preset_parameter_define.nei";
  293. private const string RANDOMPRESET_MPNMAP_CSV_NAME = "random_preset_mpn_map.nei";
  294. private const string CLASS_MARKER = "*";
  295. private const string SKIP_COLUMN_MARKER = "-";
  296. private const int OFFSET_COLUMN = 1;
  297. private const int OFFSET_ROW = 2;
  298. private const int LOWEST_NUM = 1;
  299. private RandomPresetContent.CSVData csvData;
  300. public static List<MPN> m_listUnderwearsItemGroup = new List<MPN>
  301. {
  302. MPN.panz,
  303. MPN.bra
  304. };
  305. public static List<MPN> m_listClothesItemGroupn = new List<MPN>
  306. {
  307. MPN.wear,
  308. MPN.skirt,
  309. MPN.mizugi,
  310. MPN.stkg,
  311. MPN.shoes,
  312. MPN.headset,
  313. MPN.acchat,
  314. MPN.onepiece
  315. };
  316. public static Dictionary<SceneEditInfo.EMenuCategory, string> m_dicCategoryMapping = new Dictionary<SceneEditInfo.EMenuCategory, string>
  317. {
  318. {
  319. SceneEditInfo.EMenuCategory.頭,
  320. "Head"
  321. },
  322. {
  323. SceneEditInfo.EMenuCategory.髪,
  324. "Hair"
  325. },
  326. {
  327. SceneEditInfo.EMenuCategory.服装,
  328. "Cloth"
  329. },
  330. {
  331. SceneEditInfo.EMenuCategory.身体,
  332. "Body"
  333. },
  334. {
  335. SceneEditInfo.EMenuCategory.セット,
  336. "Package"
  337. },
  338. {
  339. SceneEditInfo.EMenuCategory.アクセサリ,
  340. "Accessory"
  341. }
  342. };
  343. public static Dictionary<MPN, MPN> m_dicColorFolderMapping = new Dictionary<MPN, MPN>
  344. {
  345. {
  346. MPN.mayu,
  347. MPN.folder_mayu
  348. },
  349. {
  350. MPN.eye,
  351. MPN.folder_eye
  352. },
  353. {
  354. MPN.haircolor,
  355. MPN.hairf
  356. },
  357. {
  358. MPN.skin,
  359. MPN.folder_skin
  360. },
  361. {
  362. MPN.underhair,
  363. MPN.folder_underhair
  364. },
  365. {
  366. MPN.chikubicolor,
  367. MPN.chikubi
  368. },
  369. {
  370. MPN.eyewhite,
  371. MPN.folder_eyewhite
  372. }
  373. };
  374. private static Dictionary<MPN, RandomPresetContent.MPNMapping> m_dicMPNMapping_;
  375. public class CSVData
  376. {
  377. public string ClassName { get; set; }
  378. public List<string> Header { get; set; }
  379. public Dictionary<int, List<string>> Rows { get; set; }
  380. }
  381. public class RandomBaseGroupMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.RandomBaseGroup>
  382. {
  383. public void Load()
  384. {
  385. base.Load(RandomPresetContent.dicCsvData["RandomBaseGroup"]);
  386. }
  387. }
  388. public class BodyBaseMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.BodyBase>
  389. {
  390. public void Load()
  391. {
  392. base.Load(RandomPresetContent.dicCsvData["BodyBase"]);
  393. }
  394. }
  395. public class RandomMappingMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.RandomMapping>
  396. {
  397. public void Load()
  398. {
  399. base.Load(RandomPresetContent.dicCsvData["RandomMapping"]);
  400. }
  401. }
  402. public class ExceptionPartMappingMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.PartMapping>
  403. {
  404. public void Load()
  405. {
  406. base.Load(RandomPresetContent.dicCsvData["ExceptionPartMapping"]);
  407. }
  408. }
  409. public class PriorityPartMappingMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.PartMapping>
  410. {
  411. public void Load()
  412. {
  413. base.Load(RandomPresetContent.dicCsvData["PriorityPartMapping"]);
  414. }
  415. }
  416. public class ExecutionOrderMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.ExecutionOrder>
  417. {
  418. public void Load()
  419. {
  420. base.Load(RandomPresetContent.dicCsvData["ExecutionOrder"]);
  421. }
  422. }
  423. public class RatioToPutOnItemMasterTable : RandomPresetContent.MasterTableBase<RandomPresetContent.RatioToPutOnItem>
  424. {
  425. public void Load()
  426. {
  427. base.Load(RandomPresetContent.dicCsvData["RatioToPutOnItem"]);
  428. }
  429. }
  430. public class MasterTableBase<T> where T : RandomPresetContent.MasterBase, new()
  431. {
  432. public List<T> All
  433. {
  434. get
  435. {
  436. return this.masters;
  437. }
  438. }
  439. public void Load(RandomPresetContent.CSVData csvData)
  440. {
  441. List<string> header = csvData.Header;
  442. this.masters = new List<T>();
  443. foreach (int key in csvData.Rows.Keys)
  444. {
  445. this.ParseLine(csvData.Rows[key], header);
  446. }
  447. }
  448. private void ParseLine(List<string> row, List<string> headerElements)
  449. {
  450. Dictionary<string, string> dictionary = new Dictionary<string, string>();
  451. for (int i = 0; i < headerElements.Count; i++)
  452. {
  453. dictionary.Add(headerElements[i], row[i]);
  454. }
  455. T item = Activator.CreateInstance<T>();
  456. item.Load(dictionary);
  457. this.masters.Add(item);
  458. }
  459. protected List<T> masters;
  460. }
  461. public class MasterBase
  462. {
  463. public void Load(Dictionary<string, string> param)
  464. {
  465. foreach (string key in param.Keys)
  466. {
  467. this.SetField(key, param[key]);
  468. }
  469. }
  470. private void SetField(string key, string value)
  471. {
  472. PropertyInfo property = base.GetType().GetProperty(key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
  473. if (property.PropertyType == typeof(int))
  474. {
  475. property.SetValue(this, int.Parse(value), null);
  476. }
  477. else if (property.PropertyType == typeof(string))
  478. {
  479. property.SetValue(this, value, null);
  480. }
  481. else if (property.PropertyType == typeof(float))
  482. {
  483. property.SetValue(this, float.Parse(value), null);
  484. }
  485. else if (property.PropertyType == typeof(MPN))
  486. {
  487. property.SetValue(this, (MPN)Enum.Parse(typeof(MPN), value), null);
  488. }
  489. }
  490. }
  491. public class SliderCommon : RandomPresetContent.MasterBase
  492. {
  493. public int lowerLimit { get; set; }
  494. public int upperLimit { get; set; }
  495. }
  496. public class RandomBaseGroup : RandomPresetContent.SliderCommon
  497. {
  498. public int randomBaseGroupId { get; set; }
  499. public override string ToString()
  500. {
  501. return string.Format("RandomBaseGroup [randomBaseGrpId={0}, lowerLimit={1}, upperLimit={2}]", this.randomBaseGroupId, base.lowerLimit, base.upperLimit);
  502. }
  503. }
  504. public class BodyBase : RandomPresetContent.SliderCommon
  505. {
  506. public int bodyBaseId { get; set; }
  507. public MPN bodyBaseCategory { get; set; }
  508. public override string ToString()
  509. {
  510. return string.Format("BodyBase [bodyBaseId={0}, bodyBaseCategory={1}, lowerLimit={2}, upperLimit={3}]", new object[]
  511. {
  512. this.bodyBaseId,
  513. this.bodyBaseCategory,
  514. base.lowerLimit,
  515. base.upperLimit
  516. });
  517. }
  518. }
  519. public class RandomMapping : RandomPresetContent.MasterBase
  520. {
  521. public int randomMappingId { get; set; }
  522. public int randomBaseGroupId { get; set; }
  523. public RandomPresetContent.RandomBaseGroup randomBaseGroup { get; set; }
  524. public int bodyBaseId { get; set; }
  525. public RandomPresetContent.BodyBase bodyBase { get; set; }
  526. public override string ToString()
  527. {
  528. return string.Format("RandomMapping [randomMappingId={0}, randomBaseGroupId={1}, randomBaseGroup={2}, bodyBaseId={3}, bodyBase={4}]", new object[]
  529. {
  530. this.randomMappingId,
  531. this.randomBaseGroupId,
  532. this.randomBaseGroup,
  533. this.bodyBaseId,
  534. this.bodyBase
  535. });
  536. }
  537. }
  538. public class PartMapping : RandomPresetContent.MasterBase
  539. {
  540. public int partMappingId { get; set; }
  541. public MPN category { get; set; }
  542. public string partId { get; set; }
  543. public MPN targetCategory { get; set; }
  544. public string targetPartId { get; set; }
  545. }
  546. public class ExecutionOrder : RandomPresetContent.MasterBase
  547. {
  548. public int executionOrderId { get; set; }
  549. public MPN category { get; set; }
  550. public int order { get; set; }
  551. }
  552. public class RatioToPutOnItem : RandomPresetContent.MasterBase
  553. {
  554. public int ratioToPutOnItemId { get; set; }
  555. public MPN category { get; set; }
  556. public int ratioToPutOn { get; set; }
  557. }
  558. public class MPNMapping
  559. {
  560. public string m_buttonName;
  561. public string m_buttonTitle;
  562. public int m_executionOrder;
  563. public int m_ratioToPutOn;
  564. }
  565. }