Menu.cs 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Runtime.CompilerServices;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using UnityEngine;
  10. public class Menu : MonoBehaviour
  11. {
  12. public static string[] GetModFiles()
  13. {
  14. string str = UTY.gameProjectPath + "\\";
  15. string path = str + "Mod";
  16. if (!Directory.Exists(path))
  17. {
  18. return null;
  19. }
  20. return Directory.GetFiles(path, "mod_*.mod", SearchOption.AllDirectories);
  21. }
  22. public static string GetModPathFileName(string f_strMenuFileName)
  23. {
  24. string[] modFiles = Menu.GetModFiles();
  25. if (modFiles == null)
  26. {
  27. NDebug.MessageBox("MODエラー", "MODフォルダが無いか、MODフォルダにMODファイルが1つもありません。\n" + f_strMenuFileName);
  28. return string.Empty;
  29. }
  30. string text = Array.Find<string>(modFiles, (string a) => Path.GetFileName(a).ToLower() == f_strMenuFileName.ToLower());
  31. if (string.IsNullOrEmpty(text))
  32. {
  33. NDebug.MessageBox("MODエラー", "MODフォルダにMODファイルが見つかりません。\n" + f_strMenuFileName);
  34. return string.Empty;
  35. }
  36. return text;
  37. }
  38. public static bool ProcScript(Maid maid, string filename, bool f_bTemp = false, SubProp f_SubProp = null)
  39. {
  40. return Menu.ProcScript(maid, new MaidProp
  41. {
  42. strFileName = filename,
  43. strTempFileName = filename
  44. }, f_bTemp, f_SubProp);
  45. }
  46. public static bool ProcScript(Maid maid, MaidProp mp, bool f_bTemp = false, SubProp f_SubProp = null)
  47. {
  48. string text;
  49. if (f_bTemp)
  50. {
  51. text = mp.strTempFileName;
  52. }
  53. else
  54. {
  55. text = mp.strFileName;
  56. }
  57. bool flag = false;
  58. string text2 = string.Empty;
  59. byte[] array = null;
  60. if (text.IndexOf("mod_") == 0)
  61. {
  62. flag = true;
  63. text2 = Menu.GetModPathFileName(text);
  64. if (string.IsNullOrEmpty(text2))
  65. {
  66. return false;
  67. }
  68. text = Menu.GetBaseItemFromMod(text2);
  69. try
  70. {
  71. using (FileStream fileStream = new FileStream(text2, FileMode.Open))
  72. {
  73. if (fileStream == null)
  74. {
  75. Debug.LogWarning("MODアイテムメニューファイルが見つかりません。" + text);
  76. return false;
  77. }
  78. array = new byte[fileStream.Length];
  79. fileStream.Read(array, 0, (int)fileStream.Length);
  80. }
  81. }
  82. catch (Exception ex)
  83. {
  84. Debug.LogError("ProcScript MODアイテムメニューファイルが読み込めませんでした。 : " + text + " : " + ex.Message);
  85. return false;
  86. }
  87. }
  88. byte[] cd = null;
  89. try
  90. {
  91. using (AFileBase afileBase = GameUty.FileOpen(text, null))
  92. {
  93. if (afileBase == null || !afileBase.IsValid())
  94. {
  95. Debug.LogError("アイテムメニューファイルが見つかりません。" + text);
  96. return false;
  97. }
  98. cd = afileBase.ReadAll();
  99. }
  100. }
  101. catch (Exception ex2)
  102. {
  103. Debug.LogError("ProcScript アイテムメニューファイルが読み込めませんでした。 : " + text + " : " + ex2.Message);
  104. return false;
  105. }
  106. Menu.ProcScriptBin(maid, cd, mp, f_bTemp, f_SubProp);
  107. if (flag)
  108. {
  109. Menu.ProcModScriptBin(maid, array, text2, mp, false);
  110. }
  111. return true;
  112. }
  113. private static void ProcScriptBin(Maid maid, byte[] cd, string filename, bool f_bTemp = false, SubProp f_SubProp = null)
  114. {
  115. Menu.ProcScriptBin(maid, cd, new MaidProp
  116. {
  117. strFileName = filename,
  118. strTempFileName = filename
  119. }, f_bTemp, f_SubProp);
  120. }
  121. private static void ProcScriptBin(Maid maid, byte[] cd, MaidProp mp, bool f_bTemp = false, SubProp f_SubProp = null)
  122. {
  123. string text;
  124. if (f_bTemp)
  125. {
  126. text = mp.strTempFileName;
  127. }
  128. else
  129. {
  130. text = mp.strFileName;
  131. }
  132. TBody body = maid.body0;
  133. if (mp.idx == 72 || mp.idx == 75 || mp.idx == 76 || mp.idx == 77)
  134. {
  135. TBodySkin slot = body.GetSlot(1);
  136. if (slot.PartsVersion < 110)
  137. {
  138. return;
  139. }
  140. }
  141. List<Menu.LastParam> list = new List<Menu.LastParam>();
  142. BinaryReader binaryReader = new BinaryReader(new MemoryStream(cd), Encoding.UTF8);
  143. string text2 = binaryReader.ReadString();
  144. NDebug.Assert(text2 == "CM3D2_MENU", "ProcScriptBin 例外 : ヘッダーファイルが不正です。" + text2);
  145. int num = binaryReader.ReadInt32();
  146. string text3 = binaryReader.ReadString();
  147. string text4 = binaryReader.ReadString();
  148. string text5 = binaryReader.ReadString();
  149. string text6 = binaryReader.ReadString();
  150. long num2 = (long)binaryReader.ReadInt32();
  151. bool flag = false;
  152. string text7 = string.Empty;
  153. string text8 = string.Empty;
  154. string text9 = string.Empty;
  155. string slotname = string.Empty;
  156. int version = 100;
  157. bool flag2 = false;
  158. bool flag3 = false;
  159. for (;;)
  160. {
  161. try
  162. {
  163. for (;;)
  164. {
  165. IL_108:
  166. int num3 = (int)binaryReader.ReadByte();
  167. text8 = text7;
  168. text7 = string.Empty;
  169. if (num3 == 0)
  170. {
  171. break;
  172. }
  173. for (int i = 0; i < num3; i++)
  174. {
  175. text7 = text7 + "\"" + binaryReader.ReadString() + "\" ";
  176. }
  177. if (!(text7 == string.Empty))
  178. {
  179. goto IL_16F;
  180. }
  181. }
  182. break;
  183. IL_16F:
  184. string stringCom = UTY.GetStringCom(text7);
  185. string[] stringList = UTY.GetStringList(text7);
  186. if (stringCom == "end")
  187. {
  188. break;
  189. }
  190. if (stringCom == "name")
  191. {
  192. goto IL_16D6;
  193. }
  194. if (stringCom == "ver")
  195. {
  196. TBodySkin slot2 = body.GetSlot(stringList[1]);
  197. version = int.Parse(stringList[2]);
  198. goto IL_16D6;
  199. }
  200. if (stringCom == "アイテム")
  201. {
  202. Menu.SetMaidItemTemp(maid, stringList[1], f_bTemp);
  203. goto IL_16D6;
  204. }
  205. if (stringCom == "アイテム条件")
  206. {
  207. string slotname2 = stringList[1];
  208. if (stringList[2] == "に何か")
  209. {
  210. bool flag4 = false;
  211. TBodySkin slot3 = body.GetSlot(slotname2);
  212. if (stringList[3] == "有る")
  213. {
  214. if (slot3.obj != null)
  215. {
  216. flag4 = true;
  217. }
  218. }
  219. else if (stringList[3] == "無い")
  220. {
  221. if (slot3.obj == null)
  222. {
  223. flag4 = true;
  224. }
  225. }
  226. else
  227. {
  228. NDebug.Assert("アイテム条件が不正です。「有る」か「無い」かを指定してください。\n" + text7, false);
  229. }
  230. if (stringList[4] == "なら")
  231. {
  232. if (flag4)
  233. {
  234. Menu.SetMaidItemTemp(maid, stringList[5], f_bTemp);
  235. goto IL_2C9;
  236. }
  237. goto IL_2C9;
  238. IL_2C9:
  239. goto IL_2E0;
  240. }
  241. NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
  242. goto IL_2E0;
  243. IL_2E0:
  244. goto IL_414;
  245. }
  246. if (stringList[2] == "が")
  247. {
  248. bool flag5 = false;
  249. TBodySkin slot4 = body.GetSlot(slotname2);
  250. if (slot4.m_strModelFileName == stringList[3])
  251. {
  252. flag5 = true;
  253. }
  254. if (stringList[4] == "なら")
  255. {
  256. if (flag5)
  257. {
  258. Menu.SetMaidItemTemp(maid, stringList[5], f_bTemp);
  259. goto IL_345;
  260. }
  261. goto IL_345;
  262. IL_345:
  263. goto IL_35C;
  264. }
  265. NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
  266. goto IL_35C;
  267. IL_35C:
  268. goto IL_414;
  269. }
  270. if (!(stringList[2] == "のアイテムパラメータの"))
  271. {
  272. goto IL_414;
  273. }
  274. bool flag6 = false;
  275. TBodySkin slot5 = body.GetSlot(slotname2);
  276. string param = slot5.GetParam(stringList[3].ToLower());
  277. if (stringList[4] == "が")
  278. {
  279. if (stringList[5].ToLower() == param)
  280. {
  281. flag6 = true;
  282. }
  283. }
  284. else
  285. {
  286. NDebug.Assert("アイテム条件が不正です。「が」が必要です。\n" + text7, false);
  287. }
  288. if (stringList[6] == "なら")
  289. {
  290. if (flag6)
  291. {
  292. Menu.SetMaidItemTemp(maid, stringList[7], f_bTemp);
  293. goto IL_3FD;
  294. }
  295. goto IL_3FD;
  296. IL_3FD:
  297. goto IL_414;
  298. }
  299. NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
  300. goto IL_414;
  301. IL_414:
  302. goto IL_16D6;
  303. }
  304. if (stringCom == "if")
  305. {
  306. if (stringList[1].IndexOf("maidprop[") == 0)
  307. {
  308. string value = stringList[1].Substring(9, stringList[1].Length - 9 - 1);
  309. MPN mpn = (MPN)Enum.Parse(typeof(MPN), value, false);
  310. MaidProp prop = maid.GetProp(mpn);
  311. if (!(stringList[2] == "==") || !(stringList[3] == "nothing") || prop.nFileNameRID != 0 || !(stringList[4] == "?") || stringList[5].IndexOf("setprop[") != 0)
  312. {
  313. goto IL_594;
  314. }
  315. string value2 = stringList[5].Substring(8, stringList[5].Length - 8 - 1);
  316. MPN idx = (MPN)Enum.Parse(typeof(MPN), value2, false);
  317. if (!(stringList[6] == "="))
  318. {
  319. goto IL_594;
  320. }
  321. string text10;
  322. if (stringList[7].IndexOf("getprop[") == 0)
  323. {
  324. string value3 = stringList[7].Substring(8, stringList[7].Length - 8 - 1);
  325. MPN mpn2 = (MPN)Enum.Parse(typeof(MPN), value3, false);
  326. MaidProp prop2 = maid.GetProp(mpn2);
  327. text10 = prop2.strFileName;
  328. }
  329. else
  330. {
  331. text10 = stringList[7];
  332. }
  333. if (!string.IsNullOrEmpty(text10))
  334. {
  335. maid.SetProp(idx, text10, 0, false, false);
  336. goto IL_594;
  337. }
  338. goto IL_594;
  339. IL_594:
  340. goto IL_677;
  341. }
  342. if (stringList[1].IndexOf("slot[") != 0)
  343. {
  344. goto IL_677;
  345. }
  346. string[] array = stringList[1].Split(new char[]
  347. {
  348. '.'
  349. });
  350. string value4 = array[0].Substring(5, array[0].Length - 5 - 1);
  351. TBody.SlotID f_nSlotNo = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), value4, true);
  352. TBodySkin slot6 = maid.body0.GetSlot((int)f_nSlotNo);
  353. if (2 > array.Length || !(array[1] == "ver") || !(stringList[2] == "<"))
  354. {
  355. goto IL_677;
  356. }
  357. int num4 = int.Parse(stringList[3]);
  358. if (slot6.PartsVersion < num4 && stringList[4] == "?" && stringList[5] == "skip")
  359. {
  360. break;
  361. }
  362. goto IL_677;
  363. IL_677:
  364. goto IL_16D6;
  365. }
  366. if (stringCom == "アイテムパラメータ")
  367. {
  368. if (stringList.Length == 4)
  369. {
  370. string text11 = stringList[1];
  371. string text12 = stringList[2].ToLower();
  372. string text13 = stringList[3].ToLower();
  373. list.Add(new Menu.LastParam(0, stringCom, new string[]
  374. {
  375. text11,
  376. text12,
  377. text13
  378. }));
  379. goto IL_6EC;
  380. }
  381. Debug.LogError("アイテムパラメータ 命令の引数が不正です。SlotNameを明示的に指定しする必要があります。アイテムパラメータ <スロット名> <変数名> <値> の順です。" + text7);
  382. goto IL_6EC;
  383. IL_6EC:
  384. goto IL_16D6;
  385. }
  386. if (stringCom == "半脱ぎ" || stringCom == "リソース参照")
  387. {
  388. string key;
  389. string value5;
  390. if (stringCom == "半脱ぎ")
  391. {
  392. key = "半脱ぎ";
  393. value5 = stringList[1];
  394. }
  395. else
  396. {
  397. key = stringList[1];
  398. value5 = stringList[2];
  399. }
  400. int hashCode = Path.GetFileName(text.ToLower()).ToLower().GetHashCode();
  401. SortedDictionary<string, string> sortedDictionary;
  402. if (Menu.m_dicResourceRef.TryGetValue(hashCode, out sortedDictionary))
  403. {
  404. string empty = string.Empty;
  405. if (sortedDictionary.TryGetValue(key, out empty))
  406. {
  407. sortedDictionary[key] = value5;
  408. goto IL_79E;
  409. }
  410. sortedDictionary.Add(key, value5);
  411. goto IL_79E;
  412. IL_79E:
  413. goto IL_7C3;
  414. }
  415. sortedDictionary = new SortedDictionary<string, string>();
  416. sortedDictionary.Add(key, value5);
  417. Menu.m_dicResourceRef.Add(hashCode, sortedDictionary);
  418. goto IL_7C3;
  419. IL_7C3:
  420. goto IL_16D6;
  421. }
  422. if (stringCom == "set")
  423. {
  424. goto IL_16D6;
  425. }
  426. if (stringCom == "setname")
  427. {
  428. goto IL_16D6;
  429. }
  430. if (stringCom == "setslotitem")
  431. {
  432. string tag = stringList[1];
  433. uint val = uint.Parse(stringList[2]);
  434. maid.SetProp(tag, (int)val, false);
  435. goto IL_16D6;
  436. }
  437. if (stringCom == "additem")
  438. {
  439. string text14 = text9;
  440. if (stringList.Length > 1)
  441. {
  442. text14 = stringList[2];
  443. }
  444. slotname = text14;
  445. if (text14 == "body")
  446. {
  447. body.LoadBody_R(stringList[1], maid);
  448. }
  449. string attachSlot = string.Empty;
  450. string attachName = string.Empty;
  451. if (stringList.Length == 6)
  452. {
  453. if (stringList[3] == "アタッチ")
  454. {
  455. attachSlot = stringList[4];
  456. attachName = stringList[5];
  457. }
  458. }
  459. else if (stringList.Length == 5 && stringList[3] == "ボーンにアタッチ")
  460. {
  461. attachSlot = "ボーンにアタッチ";
  462. attachName = stringList[4];
  463. }
  464. if (text14 == "handitemr")
  465. {
  466. attachSlot = "ボーンにアタッチ";
  467. attachName = "_IK_handR";
  468. }
  469. if (text14 == "handiteml")
  470. {
  471. attachSlot = "ボーンにアタッチ";
  472. attachName = "_IK_handL";
  473. }
  474. body.AddItem((MPN)Enum.Parse(typeof(MPN), text9, true), text14, stringList[1], attachSlot, attachName, f_bTemp, version);
  475. body.SetVisibleNodeSlot(text14, true, "_ALL_");
  476. goto IL_16D6;
  477. }
  478. if (stringCom == "nofloory")
  479. {
  480. TBody.SlotID index = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
  481. body.goSlot[(int)index].m_bHitFloorY = false;
  482. goto IL_16D6;
  483. }
  484. if (stringCom == "saveitem")
  485. {
  486. text5 = stringList[1];
  487. goto IL_16D6;
  488. }
  489. if (stringCom == "category")
  490. {
  491. text9 = stringList[1];
  492. flag2 = (text9 == "skin");
  493. flag3 = (text9 == "haircolor");
  494. goto IL_16D6;
  495. }
  496. if (stringCom == "maskitem")
  497. {
  498. if (stringList.Length > 1)
  499. {
  500. string maskslot = stringList[1];
  501. body.AddMask(text9, maskslot);
  502. goto IL_A0F;
  503. }
  504. goto IL_A0F;
  505. IL_A0F:
  506. goto IL_16D6;
  507. }
  508. if (stringCom == "delitem")
  509. {
  510. string slotname3 = text9;
  511. if (stringList.Length > 1)
  512. {
  513. slotname3 = stringList[1];
  514. }
  515. body.DelItem((MPN)Enum.Parse(typeof(MPN), text9, true), slotname3);
  516. goto IL_16D6;
  517. }
  518. if (stringCom == "node消去")
  519. {
  520. body.SetVisibleNodeSlot(text9, false, stringList[1]);
  521. goto IL_16D6;
  522. }
  523. if (stringCom == "node表示")
  524. {
  525. body.SetVisibleNodeSlot(text9, true, stringList[1]);
  526. goto IL_16D6;
  527. }
  528. if (stringCom == "パーツnode消去")
  529. {
  530. body.SetVisibleNodeSlotParts(text9, stringList[1], false, stringList[2]);
  531. goto IL_16D6;
  532. }
  533. if (stringCom == "パーツnode表示")
  534. {
  535. body.SetVisibleNodeSlotParts(text9, stringList[1], true, stringList[2]);
  536. goto IL_16D6;
  537. }
  538. if (stringCom == "color")
  539. {
  540. string name = stringList[1];
  541. int matno = int.Parse(stringList[2]);
  542. string prop_name = stringList[3];
  543. Color col = new Color(float.Parse(stringList[4]) / 255f, float.Parse(stringList[5]) / 255f, float.Parse(stringList[6]) / 255f, float.Parse(stringList[7]) / 255f);
  544. body.ChangeCol(name, matno, prop_name, col);
  545. goto IL_16D6;
  546. }
  547. if (stringCom == "mancolor")
  548. {
  549. Color manColor = new Color(float.Parse(stringList[1]) / 255f, float.Parse(stringList[2]) / 255f, float.Parse(stringList[3]) / 255f, 1f);
  550. maid.ManColor = manColor;
  551. maid.ManColorUpdate();
  552. goto IL_16D6;
  553. }
  554. if (stringCom == "tex" || stringCom == "テクスチャ変更")
  555. {
  556. string text15 = stringList[1];
  557. string[] array2 = stringList[2].Split(new char[]
  558. {
  559. '&'
  560. });
  561. int num5 = -1;
  562. if (2 <= array2.Length)
  563. {
  564. foreach (string text16 in array2)
  565. {
  566. string[] array4 = text16.Split(new char[]
  567. {
  568. '='
  569. });
  570. MPN mpn3 = (MPN)Enum.Parse(typeof(MPN), array4[0], true);
  571. if (mpn3 == (MPN)mp.idx)
  572. {
  573. int.TryParse(array4[1], out num5);
  574. break;
  575. }
  576. }
  577. if (num5 == -1)
  578. {
  579. NDebug.Assert("tex mat no error.", false);
  580. }
  581. }
  582. else
  583. {
  584. int.TryParse(array2[0], out num5);
  585. if (mp.idx == 72)
  586. {
  587. num5 = 7;
  588. }
  589. }
  590. string text17 = stringList[3];
  591. string filename = stringList[4];
  592. MaidParts.PARTS_COLOR parts_COLOR = MaidParts.PARTS_COLOR.NONE;
  593. if (stringList.Length == 6)
  594. {
  595. string text18 = stringList[5];
  596. try
  597. {
  598. parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), text18.ToUpper());
  599. }
  600. catch
  601. {
  602. NDebug.Assert("無限色IDがありません。" + text18, false);
  603. }
  604. }
  605. if (flag2 && parts_COLOR == MaidParts.PARTS_COLOR.SKIN)
  606. {
  607. if (text15 == "body" && num5 == 0 && text17.ToLower() == "_maintex")
  608. {
  609. body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Tex");
  610. flag = true;
  611. body.ChangeTex(text15, num5, "_OutlineTex", filename, null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
  612. body.ChangeTex(text15, num5, "_OutlineToonRamp", "toonBlackA1.tex", null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
  613. }
  614. else if (text15 == "head" && num5 == 5 && text17.ToLower() == "_maintex")
  615. {
  616. body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Tex");
  617. flag = true;
  618. body.ChangeTex(text15, num5, "_OutlineTex", filename, null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
  619. body.ChangeTex(text15, num5, "_OutlineToonRamp", "toonBlackA1.tex", null, MaidParts.PARTS_COLOR.SKIN_OUTLINE);
  620. }
  621. }
  622. if (Product.isEnglish && !Product.isPublic && flag2 && text15 == "body" && num5 == 0 && text17.ToLower() == "_maintex")
  623. {
  624. if (parts_COLOR == MaidParts.PARTS_COLOR.SKIN)
  625. {
  626. body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Tex_Texwidth");
  627. }
  628. else
  629. {
  630. body.ChangeShader(text15, num5, "CM3D2_Toony_Lighted_Outline_Texwidth");
  631. }
  632. body.ChangeTex(text15, num5, "_OutlineWidthTex", "skin_en_outline_width.tex", null, MaidParts.PARTS_COLOR.NONE);
  633. flag = true;
  634. }
  635. body.ChangeTex(text15, num5, text17, filename, null, parts_COLOR);
  636. if (parts_COLOR != MaidParts.PARTS_COLOR.NONE)
  637. {
  638. maid.Parts.SetPartsColor(parts_COLOR, maid.Parts.GetPartsColor(parts_COLOR));
  639. }
  640. if ((flag2 || flag3) && !flag)
  641. {
  642. body.RestoreShader(text15);
  643. goto IL_ED9;
  644. }
  645. goto IL_ED9;
  646. IL_ED9:
  647. goto IL_16D6;
  648. }
  649. if (stringCom == "prop")
  650. {
  651. string tag2 = stringList[1];
  652. string s = stringList[2];
  653. maid.SetProp(tag2, int.Parse(s), false);
  654. goto IL_16D6;
  655. }
  656. if (stringCom == "テクスチャ乗算")
  657. {
  658. goto IL_16D6;
  659. }
  660. if (stringCom == "テクスチャ合成")
  661. {
  662. if (stringList.Length != 7)
  663. {
  664. NDebug.Assert("テクスチャ合成 の引数が不正です。" + stringList.Length, false);
  665. }
  666. if ((text9 == "accTatoo" || text9 == "hokuro") && !text.Contains("_del"))
  667. {
  668. body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), true, 0, 0, 0f, 0f, true, f_SubProp, 1f, 1024);
  669. goto IL_103C;
  670. }
  671. body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), false, 0, 0, 0f, 0f, false, null, 1f, 1024);
  672. goto IL_103C;
  673. IL_103C:
  674. goto IL_16D6;
  675. }
  676. if (stringCom == "テクスチャセット合成")
  677. {
  678. if (stringList.Length != 7)
  679. {
  680. NDebug.Assert("テクスチャセット合成 の引数が不正です。" + stringList.Length, false);
  681. }
  682. body.MulTexSet(stringList[1], int.Parse(stringList[2]), stringList[3], int.Parse(stringList[4]), stringList[5], (GameUty.SystemMaterial)Enum.Parse(typeof(GameUty.SystemMaterial), stringList[6]), true, 0, 0, 0f, 0f, true, null, 1f, 1024);
  683. goto IL_16D6;
  684. }
  685. if (stringCom == "マテリアル変更")
  686. {
  687. string f_strSlotName = stringList[1];
  688. int f_nMatNo = int.Parse(stringList[2]);
  689. string f_strFileName = stringList[3];
  690. body.ChangeMaterial(f_strSlotName, f_nMatNo, f_strFileName);
  691. goto IL_16D6;
  692. }
  693. if (stringCom == "shader")
  694. {
  695. string f_strSlotName2 = stringList[1];
  696. int f_nMatNo2 = int.Parse(stringList[2]);
  697. string f_strShaderFileName = stringList[3];
  698. body.ChangeShader(f_strSlotName2, f_nMatNo2, f_strShaderFileName);
  699. flag = true;
  700. goto IL_16D6;
  701. }
  702. if (stringCom == "アタッチポイントの設定")
  703. {
  704. if (stringList.Length < 5)
  705. {
  706. Debug.LogError("アタッチポイントの設定引数の数が不正です。 " + text7 + " " + text3);
  707. goto IL_11FF;
  708. }
  709. Vector3 v = new Vector3(float.Parse(stringList[2]), float.Parse(stringList[3]), float.Parse(stringList[4]));
  710. Quaternion q = Quaternion.identity;
  711. if (stringList.Length == 8)
  712. {
  713. q = Quaternion.Euler(float.Parse(stringList[5]), float.Parse(stringList[6]), float.Parse(stringList[7]));
  714. }
  715. else
  716. {
  717. Debug.LogError("アタッチポイントの設定引数に角度指定がありません。 " + text7 + " " + text3);
  718. }
  719. body.SetAttachPoint(slotname, stringList[1], v, q, f_bTemp);
  720. goto IL_11FF;
  721. IL_11FF:
  722. goto IL_16D6;
  723. }
  724. if (stringCom == "blendset")
  725. {
  726. string blendSetName = stringList[1];
  727. int num6 = (stringList.Length - 2) / 2;
  728. body.Face.morph.NewBlendSet(blendSetName);
  729. for (int k = 0; k < num6; k++)
  730. {
  731. string tag3 = stringList[2 + k * 2].ToLower();
  732. float val2 = float.Parse(stringList[3 + k * 2]);
  733. body.Face.morph.SetValueBlendSet(blendSetName, tag3, val2);
  734. }
  735. goto IL_16D6;
  736. }
  737. if (stringCom == "paramset")
  738. {
  739. body.Face.NewParamSet(text7);
  740. goto IL_16D6;
  741. }
  742. if (stringCom == "commenttype")
  743. {
  744. if (!maid.status.partsDic.ContainsKey(stringList[1]))
  745. {
  746. maid.status.partsDic.Add(stringList[1], string.Empty);
  747. }
  748. maid.status.partsDic[stringList[1]] = stringList[2];
  749. goto IL_16D6;
  750. }
  751. if (stringCom == "useredit")
  752. {
  753. if (stringList[2].ToLower() == "material")
  754. {
  755. body.SetMaterialProperty(text9, stringList[3], int.Parse(stringList[4]), stringList[5], stringList[6], stringList[7], false);
  756. goto IL_1357;
  757. }
  758. goto IL_1357;
  759. IL_1357:
  760. goto IL_16D6;
  761. }
  762. if (stringCom == "bonemorph")
  763. {
  764. if (9 > stringList.Length || stringList.Length > 10)
  765. {
  766. Debug.LogError("BoneMorpの設定引数の数が不正です。 " + text7 + " " + text3);
  767. }
  768. if (stringList.Length == 9)
  769. {
  770. body.bonemorph.ChangeMorphPosValue(stringList[1], stringList[2], new Vector3(float.Parse(stringList[3]), float.Parse(stringList[4]), float.Parse(stringList[5])), new Vector3(float.Parse(stringList[6]), float.Parse(stringList[7]), float.Parse(stringList[8])));
  771. goto IL_151D;
  772. }
  773. string text19 = stringList[1].ToLower();
  774. string strPropName = stringList[2];
  775. string f_strBoneName = stringList[3];
  776. Vector3 f_fAddMin = new Vector3(float.Parse(stringList[4]), float.Parse(stringList[5]), float.Parse(stringList[6]));
  777. Vector3 f_fAddMax = new Vector3(float.Parse(stringList[7]), float.Parse(stringList[8]), float.Parse(stringList[9]));
  778. if (text19 != null)
  779. {
  780. if (text19 == "pos")
  781. {
  782. body.bonemorph.ChangeMorphPosValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
  783. goto IL_151D;
  784. }
  785. if (text19 == "rot")
  786. {
  787. body.bonemorph.ChangeMorphRotatioValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
  788. goto IL_151D;
  789. }
  790. if (text19 == "scl")
  791. {
  792. body.bonemorph.ChangeMorphSclValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
  793. goto IL_151D;
  794. }
  795. }
  796. Debug.LogError(string.Concat(new string[]
  797. {
  798. "BoneMorpのタイプ指定が不正です[",
  799. text19,
  800. "]\n",
  801. text7,
  802. " ",
  803. text3
  804. }));
  805. goto IL_151D;
  806. IL_151D:
  807. goto IL_16D6;
  808. }
  809. if (stringCom == "length")
  810. {
  811. if (stringList.Length != 11)
  812. {
  813. Debug.LogError("lengthの設定引数の数が不正です。 " + text7 + " " + text3);
  814. }
  815. body.SetHairLengthDataList(stringList[1], stringList[2], stringList[3], stringList[4], new Vector3(float.Parse(stringList[5]), float.Parse(stringList[6]), float.Parse(stringList[7])), new Vector3(float.Parse(stringList[8]), float.Parse(stringList[9]), float.Parse(stringList[10])));
  816. goto IL_16D6;
  817. }
  818. if (stringCom == "anime")
  819. {
  820. if (stringList.Length < 3)
  821. {
  822. Debug.LogError("animeの設定引数の数が不正です。 " + text7 + " " + text3);
  823. }
  824. TBody.SlotID f_slot = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
  825. body.ItemAnimationLoad(f_slot, stringList[2]);
  826. bool f_bLoop = false;
  827. if (3 < stringList.Length)
  828. {
  829. f_bLoop = (stringList[3] == "loop");
  830. }
  831. body.ItemAnimationPlay(f_slot, stringList[2], f_bLoop);
  832. goto IL_16D6;
  833. }
  834. if (stringCom == "param2")
  835. {
  836. if (stringList.Length == 4)
  837. {
  838. string slotname4 = stringList[1];
  839. body.GetSlot(slotname4).SetParam2(stringList[2], stringList[3]);
  840. goto IL_1690;
  841. }
  842. Debug.LogError("param2の設定引数の数が不正です。 " + text7 + " " + text3);
  843. goto IL_1690;
  844. IL_1690:
  845. goto IL_16D6;
  846. }
  847. if (stringCom == "animematerial")
  848. {
  849. TBody.SlotID f_slot2 = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
  850. string s2 = stringList[2];
  851. body.MaterialAnimatorAdd(f_slot2, int.Parse(s2));
  852. goto IL_16D6;
  853. }
  854. goto IL_16D6;
  855. IL_16D6:
  856. goto IL_1759;
  857. }
  858. catch (Exception ex)
  859. {
  860. Debug.LogError(string.Concat(new string[]
  861. {
  862. "Exception ",
  863. Path.GetFileName(text),
  864. " 現在処理中だった行 = ",
  865. text7,
  866. " 以前の行 = ",
  867. text8,
  868. " ",
  869. ex.Message,
  870. "StackTrace:\n",
  871. ex.StackTrace
  872. }));
  873. NDebug.Assert("メニューファイル処理中にエラーが発生しました。" + Path.GetFileName(text), true);
  874. goto IL_1759;
  875. }
  876. IL_1759:
  877. goto IL_108;
  878. }
  879. list.Sort((Menu.LastParam a, Menu.LastParam b) => a.nOrder - a.nOrder);
  880. for (int l = 0; l < list.Count; l++)
  881. {
  882. Menu.LastParam lastParam = list[l];
  883. if (lastParam.strComm == "アイテムパラメータ")
  884. {
  885. TBodySkin slot7 = body.GetSlot(lastParam.aryArgs[0]);
  886. slot7.SetParam(lastParam.aryArgs[1], lastParam.aryArgs[2]);
  887. }
  888. }
  889. binaryReader.Close();
  890. binaryReader = null;
  891. }
  892. public static void SetMaidItemTemp(Maid maid, string filename, bool f_bTemp = false)
  893. {
  894. byte[] buffer = null;
  895. try
  896. {
  897. if (!GameUty.IsExistFile(filename, null))
  898. {
  899. return;
  900. }
  901. using (AFileBase afileBase = GameUty.FileOpen(filename, null))
  902. {
  903. if (!afileBase.IsValid())
  904. {
  905. NDebug.Assert("メニューファイルが見つかりません。" + filename, false);
  906. }
  907. buffer = afileBase.ReadAll();
  908. }
  909. }
  910. catch (Exception ex)
  911. {
  912. Debug.LogError("ProcScriptBin/SetMaidItemTemp アイテムメニューファイルが読み込めませんでした。 : " + filename + " : " + ex.Message);
  913. }
  914. BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer), Encoding.UTF8);
  915. string text = binaryReader.ReadString();
  916. NDebug.Assert(text == "CM3D2_MENU", "ProcScriptBin/SetMaidItemTemp 例外 : " + filename + " のヘッダーが不正です。" + text);
  917. int num = binaryReader.ReadInt32();
  918. string text2 = binaryReader.ReadString();
  919. string text3 = binaryReader.ReadString();
  920. string text4 = binaryReader.ReadString();
  921. if (text4 == "acctatoo")
  922. {
  923. maid.DelProp(MPN.acctatoo, false);
  924. maid.SetSubProp(MPN.acctatoo, 0, filename, 0);
  925. }
  926. else if (text4 == "hokuro")
  927. {
  928. maid.DelProp(MPN.hokuro, false);
  929. maid.SetSubProp(MPN.hokuro, 0, filename, 0);
  930. }
  931. else
  932. {
  933. maid.SetProp(text4, filename, 0, f_bTemp, false);
  934. }
  935. }
  936. public static bool ExportModScript(Maid maid, string filename, bool f_bTemp = false)
  937. {
  938. byte[] cd = null;
  939. try
  940. {
  941. using (AFileBase afileBase = GameUty.FileSystem.FileOpen(filename))
  942. {
  943. if (!afileBase.IsValid())
  944. {
  945. Debug.LogWarning("アイテムメニューファイルが見つかりません。" + filename);
  946. return false;
  947. }
  948. cd = afileBase.ReadAll();
  949. }
  950. }
  951. catch (Exception ex)
  952. {
  953. Debug.LogError("ExportModScript アイテムメニューファイルが読み込めませんでした。 : " + filename + " : " + ex.Message);
  954. }
  955. string str = UTY.gameProjectPath + "\\";
  956. string text = str + "ModExport";
  957. if (!Directory.Exists(text))
  958. {
  959. Directory.CreateDirectory(text);
  960. }
  961. string text2 = "mod_" + Path.GetFileNameWithoutExtension(filename);
  962. text2 = text2.Trim();
  963. text = text + "\\" + text2;
  964. if (!Directory.Exists(text))
  965. {
  966. Directory.CreateDirectory(text);
  967. }
  968. StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
  969. streamWriter.WriteLine("出力バージョン\t" + 1480);
  970. streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
  971. try
  972. {
  973. Menu.ExportModScript(maid, cd, streamWriter, text + "\\" + text2, f_bTemp);
  974. NUty.WinMessageBox(NUty.GetWindowHandle(), string.Concat(new string[]
  975. {
  976. "MODテンプレート出力完了\n",
  977. text,
  978. "\\",
  979. text2,
  980. ".txt"
  981. }), "MOD Compile Completed", 0);
  982. }
  983. catch (Exception ex2)
  984. {
  985. Debug.LogError("ExportModScript 例外 : " + filename + " : " + ex2.Message);
  986. }
  987. finally
  988. {
  989. streamWriter.Close();
  990. streamWriter.Dispose();
  991. streamWriter = null;
  992. }
  993. return true;
  994. }
  995. public static void ExportModScript(Maid maid, byte[] cd, StreamWriter sw, string filename, bool f_bTemp = false)
  996. {
  997. TBody body = maid.body0;
  998. List<Menu.LastParam> list = new List<Menu.LastParam>();
  999. BinaryReader binaryReader = new BinaryReader(new MemoryStream(cd), Encoding.UTF8);
  1000. string text = binaryReader.ReadString();
  1001. NDebug.Assert(text == "CM3D2_MENU", "ExportModScript 例外 : ヘッダーファイルが不正です。" + text);
  1002. int num = binaryReader.ReadInt32();
  1003. string path = binaryReader.ReadString();
  1004. string str = binaryReader.ReadString();
  1005. sw.WriteLine("アイテム名\t" + str);
  1006. string str2 = binaryReader.ReadString();
  1007. sw.WriteLine("カテゴリ名\t" + str2);
  1008. string text2 = binaryReader.ReadString();
  1009. sw.WriteLine("説明\t" + text2.Replace("\n", "《改行》"));
  1010. sw.WriteLine("アイコン\t" + Path.GetFileName(filename + ".png"));
  1011. long num2 = (long)binaryReader.ReadInt32();
  1012. bool flag = false;
  1013. List<string> list2 = new List<string>();
  1014. string text3 = string.Empty;
  1015. string text4 = string.Empty;
  1016. string empty = string.Empty;
  1017. string empty2 = string.Empty;
  1018. try
  1019. {
  1020. for (;;)
  1021. {
  1022. int num3 = (int)binaryReader.ReadByte();
  1023. text4 = text3;
  1024. text3 = string.Empty;
  1025. if (num3 == 0)
  1026. {
  1027. break;
  1028. }
  1029. for (int i = 0; i < num3; i++)
  1030. {
  1031. text3 = text3 + "\"" + binaryReader.ReadString() + "\" ";
  1032. }
  1033. if (!(text3 == string.Empty))
  1034. {
  1035. string stringCom = UTY.GetStringCom(text3);
  1036. string[] stringList = UTY.GetStringList(text3);
  1037. if (stringCom == "end")
  1038. {
  1039. break;
  1040. }
  1041. if (!(stringCom == "name"))
  1042. {
  1043. if (stringCom == "icon" || stringCom == "icons")
  1044. {
  1045. string f_strFileName = stringList[1];
  1046. Texture2D texture2D = ImportCM.CreateTexture(f_strFileName);
  1047. if (texture2D != null)
  1048. {
  1049. UTY.SaveImage(texture2D, filename + ".png");
  1050. }
  1051. }
  1052. else if (stringCom == "additem")
  1053. {
  1054. sw.WriteLine("アイテム変更");
  1055. string text5 = empty;
  1056. if (stringList.Length > 1)
  1057. {
  1058. text5 = stringList[2];
  1059. }
  1060. list2.Add(text5);
  1061. sw.WriteLine("\tスロット名\t" + text5);
  1062. TBodySkin slot = maid.body0.GetSlot(text5);
  1063. foreach (Transform transform in slot.obj.GetComponentsInChildren<Transform>(true))
  1064. {
  1065. Renderer component = transform.GetComponent<Renderer>();
  1066. if (!(component == null) && component.materials != null)
  1067. {
  1068. Material[] materials = component.materials;
  1069. for (int k = 0; k < materials.Length; k++)
  1070. {
  1071. Material f_mat = materials[k];
  1072. sw.WriteLine("\t\tマテリアル番号\t" + k);
  1073. Menu.ModMaterial(f_mat, sw);
  1074. }
  1075. }
  1076. }
  1077. }
  1078. else if (!(stringCom == "color"))
  1079. {
  1080. if (stringCom == "tex" || stringCom == "テクスチャ変更")
  1081. {
  1082. string text6 = stringList[1];
  1083. int num4 = int.Parse(stringList[2]);
  1084. string str3 = stringList[3];
  1085. string text7 = stringList[4];
  1086. string text8 = (6 > stringList.Length) ? null : stringList[5];
  1087. if (!list2.Contains(text6))
  1088. {
  1089. string text9 = "テクスチャ変更";
  1090. text9 = text9 + "\t" + text6;
  1091. text9 = text9 + "\t" + num4;
  1092. text9 = text9 + "\t" + str3;
  1093. text9 = text9 + "\t" + text7;
  1094. if (!string.IsNullOrEmpty(text8))
  1095. {
  1096. text9 = text9 + "\t" + text8;
  1097. }
  1098. if (text7.Contains("*"))
  1099. {
  1100. string text10 = string.Empty;
  1101. TBodySkin slot2 = maid.body0.GetSlot(text6);
  1102. if (slot2 != null)
  1103. {
  1104. text10 += "参考)出力時のモデル名は ";
  1105. text10 += Path.GetFileNameWithoutExtension(slot2.m_strModelFileName);
  1106. text10 += " です。";
  1107. }
  1108. sw.WriteLine("// * の部分は現在装着されているモデル名に置換されます。" + text10);
  1109. }
  1110. if (!string.IsNullOrEmpty(text8) && !flag)
  1111. {
  1112. string text11 = "// 無限色ID群 ";
  1113. IEnumerator enumerator = Enum.GetValues(typeof(MaidParts.PARTS_COLOR)).GetEnumerator();
  1114. try
  1115. {
  1116. while (enumerator.MoveNext())
  1117. {
  1118. object obj = enumerator.Current;
  1119. text11 = text11 + ((MaidParts.PARTS_COLOR)obj).ToString() + " ";
  1120. }
  1121. }
  1122. finally
  1123. {
  1124. IDisposable disposable;
  1125. if ((disposable = (enumerator as IDisposable)) != null)
  1126. {
  1127. disposable.Dispose();
  1128. }
  1129. }
  1130. sw.WriteLine(text11);
  1131. flag = true;
  1132. }
  1133. sw.WriteLine(text9);
  1134. }
  1135. }
  1136. else if (stringCom == "テクスチャ合成")
  1137. {
  1138. string item = stringList[1];
  1139. int num5 = int.Parse(stringList[2]);
  1140. string text12 = stringList[3];
  1141. string text13 = stringList[4];
  1142. if (!list2.Contains(item))
  1143. {
  1144. }
  1145. }
  1146. else if (stringCom == "マテリアル変更")
  1147. {
  1148. string text14 = stringList[1];
  1149. int num6 = int.Parse(stringList[2]);
  1150. string text15 = stringList[3];
  1151. if (!list2.Contains(text14))
  1152. {
  1153. sw.WriteLine("マテリアル変更");
  1154. sw.WriteLine("\tスロット名\t" + text14);
  1155. TBodySkin slot3 = maid.body0.GetSlot(text14);
  1156. foreach (Transform transform2 in slot3.obj.GetComponentsInChildren<Transform>(true))
  1157. {
  1158. Renderer component2 = transform2.GetComponent<Renderer>();
  1159. if (!(component2 == null) && component2.materials != null)
  1160. {
  1161. Material[] materials2 = component2.materials;
  1162. for (int m = 0; m < materials2.Length; m++)
  1163. {
  1164. Material f_mat2 = materials2[m];
  1165. sw.WriteLine("\t\tマテリアル番号\t" + m);
  1166. Menu.ModMaterial(f_mat2, sw);
  1167. }
  1168. }
  1169. }
  1170. }
  1171. }
  1172. else if (stringCom == "color_set")
  1173. {
  1174. if (stringList.Length >= 3)
  1175. {
  1176. string text16 = stringList[2];
  1177. text16 = "mod_" + Path.GetFileNameWithoutExtension(text16) + ".mod";
  1178. sw.WriteLine("色セット\t" + stringList[1] + "\t" + text16);
  1179. }
  1180. else
  1181. {
  1182. sw.WriteLine("色セット\t" + stringList[1]);
  1183. }
  1184. MPN f_mpn = (MPN)Enum.Parse(typeof(MPN), stringList[1].ToLower());
  1185. maid.ExportModBaseMenu(f_mpn);
  1186. }
  1187. }
  1188. }
  1189. }
  1190. }
  1191. }
  1192. catch (Exception ex)
  1193. {
  1194. Debug.LogError(string.Concat(new string[]
  1195. {
  1196. "Exception ",
  1197. Path.GetFileName(path),
  1198. " 現在処理中だった行 = ",
  1199. text3,
  1200. " 以前の行 = ",
  1201. text4,
  1202. " ",
  1203. ex.Message,
  1204. "StackTrace:\n",
  1205. ex.StackTrace
  1206. }));
  1207. NDebug.Assert("メニューファイル処理中にエラーが発生しました。" + Path.GetFileName(path), false);
  1208. if (binaryReader != null)
  1209. {
  1210. binaryReader.Close();
  1211. binaryReader = null;
  1212. }
  1213. throw ex;
  1214. }
  1215. if (binaryReader != null)
  1216. {
  1217. binaryReader.Close();
  1218. binaryReader = null;
  1219. }
  1220. }
  1221. public static string[] NeedTextureWildCard(string f_strTexName)
  1222. {
  1223. string[] array;
  1224. if (f_strTexName.Contains("*"))
  1225. {
  1226. string strTexName = f_strTexName;
  1227. strTexName = strTexName.Replace("*", ".*");
  1228. if (Menu.m_strAllTexInFileSys == null)
  1229. {
  1230. Menu.m_strAllTexInFileSys = GameUty.FileSystem.GetList(string.Empty, AFileSystemBase.ListType.AllFile);
  1231. }
  1232. array = Array.FindAll<string>(Menu.m_strAllTexInFileSys, (string i) => new Regex(strTexName).IsMatch(i));
  1233. array = Array.FindAll<string>(array, (string i) => new Regex("^((?!_i_).)*$").IsMatch(i));
  1234. IEnumerable<string> source = array;
  1235. if (Menu.<>f__mg$cache0 == null)
  1236. {
  1237. Menu.<>f__mg$cache0 = new Func<string, string>(Path.GetFileName);
  1238. }
  1239. array = source.Select(Menu.<>f__mg$cache0).ToArray<string>();
  1240. string strMatchGroup = strTexName.Replace(".*", "(?<WILD>.*)");
  1241. array = array.Select(delegate(string i)
  1242. {
  1243. Match match = new Regex(strMatchGroup).Match(i);
  1244. if (match.Success)
  1245. {
  1246. return match.Groups["WILD"].Value;
  1247. }
  1248. return i;
  1249. }).ToArray<string>();
  1250. }
  1251. else
  1252. {
  1253. array = new string[]
  1254. {
  1255. Path.GetFileName(f_strTexName)
  1256. };
  1257. }
  1258. return array;
  1259. }
  1260. private static void ModMaterial(Material f_mat, StreamWriter f_sw)
  1261. {
  1262. for (int i = 0; i < Menu.material_properties.GetLength(0); i++)
  1263. {
  1264. if (f_mat.HasProperty(Menu.material_properties[i, 0]))
  1265. {
  1266. if (Menu.material_properties[i, 1] == "tex")
  1267. {
  1268. Texture texture = f_mat.GetTexture(Menu.material_properties[i, 0]);
  1269. f_sw.WriteLine("\t\t\tテクスチャ設定\t" + Menu.material_properties[i, 0] + "\t" + texture.name);
  1270. }
  1271. else if (Menu.material_properties[i, 1] == "col")
  1272. {
  1273. Color color = f_mat.GetColor(Menu.material_properties[i, 0]);
  1274. f_sw.WriteLine(string.Concat(new object[]
  1275. {
  1276. "\t\t\t色設定\t",
  1277. Menu.material_properties[i, 0],
  1278. "\t",
  1279. (int)(255f * color.r),
  1280. "\t",
  1281. (int)(255f * color.g),
  1282. "\t",
  1283. (int)(255f * color.b),
  1284. "\t",
  1285. (int)(255f * color.a)
  1286. }));
  1287. }
  1288. else if (Menu.material_properties[i, 1] == "f")
  1289. {
  1290. float @float = f_mat.GetFloat(Menu.material_properties[i, 0]);
  1291. f_sw.WriteLine(string.Concat(new object[]
  1292. {
  1293. "\t\t\t数値設定\t",
  1294. Menu.material_properties[i, 0],
  1295. "\t",
  1296. @float
  1297. }));
  1298. }
  1299. }
  1300. }
  1301. }
  1302. private static string GetBaseItemFromMod(string f_strModMenu)
  1303. {
  1304. string empty = string.Empty;
  1305. FileStream fileStream = new FileStream(f_strModMenu, FileMode.Open);
  1306. if (fileStream == null)
  1307. {
  1308. return string.Empty;
  1309. }
  1310. BinaryReader binaryReader = new BinaryReader(fileStream);
  1311. string a = binaryReader.ReadString();
  1312. NDebug.Assert(a == "CM3D2_MOD", "セーブデータファイルのヘッダーが不正です。_MOD");
  1313. int num = binaryReader.ReadInt32();
  1314. string text = binaryReader.ReadString();
  1315. string text2 = binaryReader.ReadString();
  1316. text2 = text2.Replace(":", " ");
  1317. string text3 = binaryReader.ReadString();
  1318. string text4 = binaryReader.ReadString();
  1319. string text5 = binaryReader.ReadString();
  1320. binaryReader.Close();
  1321. fileStream.Close();
  1322. fileStream.Dispose();
  1323. return text2;
  1324. }
  1325. private static void ProcModScriptBin(Maid maid, byte[] cd, string filename, bool f_bTemp = false)
  1326. {
  1327. Menu.ProcModScriptBin(maid, cd, filename, null, f_bTemp);
  1328. }
  1329. private static void ProcModScriptBin(Maid maid, byte[] cd, string filename, MaidProp mp, bool f_bTemp = false)
  1330. {
  1331. if (mp != null && maid.body0 != null && (mp.idx == 72 || mp.idx == 75 || mp.idx == 76 || mp.idx == 77))
  1332. {
  1333. TBodySkin slot = maid.body0.GetSlot(1);
  1334. if (slot.PartsVersion < 110)
  1335. {
  1336. return;
  1337. }
  1338. }
  1339. BinaryReader binaryReader = new BinaryReader(new MemoryStream(cd), Encoding.UTF8);
  1340. string text = binaryReader.ReadString();
  1341. NDebug.Assert(text == "CM3D2_MOD", "ProcModScriptBin 例外 : ヘッダーファイルが不正です。" + text);
  1342. int num = binaryReader.ReadInt32();
  1343. string text2 = binaryReader.ReadString();
  1344. string text3 = binaryReader.ReadString();
  1345. string text4 = binaryReader.ReadString();
  1346. string text5 = binaryReader.ReadString();
  1347. string text6 = binaryReader.ReadString();
  1348. string text7 = binaryReader.ReadString();
  1349. MPN mpn = MPN.null_mpn;
  1350. try
  1351. {
  1352. mpn = (MPN)Enum.Parse(typeof(MPN), text7);
  1353. }
  1354. catch
  1355. {
  1356. NDebug.Assert("カテゴリがありません。" + text7, false);
  1357. }
  1358. string text8 = string.Empty;
  1359. if (mpn != MPN.null_mpn)
  1360. {
  1361. text8 = binaryReader.ReadString();
  1362. }
  1363. string s = binaryReader.ReadString();
  1364. int num2 = binaryReader.ReadInt32();
  1365. Dictionary<string, byte[]> dictionary = new Dictionary<string, byte[]>();
  1366. for (int i = 0; i < num2; i++)
  1367. {
  1368. string key = binaryReader.ReadString();
  1369. int count = binaryReader.ReadInt32();
  1370. byte[] value = binaryReader.ReadBytes(count);
  1371. dictionary.Add(key, value);
  1372. }
  1373. binaryReader.Close();
  1374. binaryReader = null;
  1375. using (StringReader stringReader = new StringReader(s))
  1376. {
  1377. Menu.IMode mode = Menu.IMode.Non;
  1378. string slotname = string.Empty;
  1379. TBodySkin tbodySkin = null;
  1380. Material material = null;
  1381. int num3 = 0;
  1382. string text9;
  1383. while ((text9 = stringReader.ReadLine()) != null)
  1384. {
  1385. string[] array = text9.Split(new char[]
  1386. {
  1387. '\t',
  1388. ' '
  1389. }, StringSplitOptions.RemoveEmptyEntries);
  1390. if (array[0] == "アイテム変更" || array[0] == "マテリアル変更")
  1391. {
  1392. mode = Menu.IMode.ItemChange;
  1393. }
  1394. else if (array[0] == "テクスチャ変更")
  1395. {
  1396. mode = Menu.IMode.TexChange;
  1397. }
  1398. if (mode == Menu.IMode.ItemChange)
  1399. {
  1400. if (array[0] == "スロット名")
  1401. {
  1402. slotname = array[1];
  1403. tbodySkin = maid.body0.GetSlot(slotname);
  1404. }
  1405. if (tbodySkin != null)
  1406. {
  1407. if (array[0] == "マテリアル番号")
  1408. {
  1409. num3 = int.Parse(array[1]);
  1410. foreach (Transform transform in tbodySkin.obj.GetComponentsInChildren<Transform>(true))
  1411. {
  1412. Renderer component = transform.GetComponent<Renderer>();
  1413. if (!(component == null) && component.materials != null)
  1414. {
  1415. Material[] materials = component.materials;
  1416. for (int k = 0; k < materials.Length; k++)
  1417. {
  1418. if (k == num3)
  1419. {
  1420. material = materials[k];
  1421. break;
  1422. }
  1423. }
  1424. }
  1425. }
  1426. }
  1427. if (material != null)
  1428. {
  1429. if (array[0] == "テクスチャ設定")
  1430. {
  1431. maid.body0.ChangeTex(slotname, num3, array[1], array[2].ToLower(), dictionary, MaidParts.PARTS_COLOR.NONE);
  1432. }
  1433. else if (array[0] == "色設定")
  1434. {
  1435. material.SetColor(array[1], new Color(float.Parse(array[2]) / 255f, float.Parse(array[3]) / 255f, float.Parse(array[4]) / 255f, float.Parse(array[5]) / 255f));
  1436. }
  1437. else if (array[0] == "数値設定")
  1438. {
  1439. material.SetFloat(array[1], float.Parse(array[2]));
  1440. }
  1441. }
  1442. }
  1443. }
  1444. else if (mode == Menu.IMode.TexChange)
  1445. {
  1446. MaidParts.PARTS_COLOR parts_COLOR = MaidParts.PARTS_COLOR.NONE;
  1447. if (array.Length == 6)
  1448. {
  1449. string text10 = array[5];
  1450. try
  1451. {
  1452. parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), text10.ToUpper());
  1453. }
  1454. catch
  1455. {
  1456. NDebug.Assert("無限色IDがありません。" + text10, false);
  1457. }
  1458. }
  1459. int matno = int.Parse(array[2]);
  1460. if (mp != null && mp.idx == 72)
  1461. {
  1462. matno = 7;
  1463. }
  1464. maid.body0.ChangeTex(array[1], matno, array[3], array[4].ToLower(), dictionary, parts_COLOR);
  1465. if (parts_COLOR != MaidParts.PARTS_COLOR.NONE)
  1466. {
  1467. maid.Parts.SetPartsColor(parts_COLOR, maid.Parts.GetPartsColor(parts_COLOR));
  1468. }
  1469. }
  1470. }
  1471. }
  1472. }
  1473. // Note: this type is marked as 'beforefieldinit'.
  1474. static Menu()
  1475. {
  1476. string[,] array = new string[31, 2];
  1477. array[0, 0] = "_MainTex";
  1478. array[0, 1] = "tex";
  1479. array[1, 0] = "_BumpMap";
  1480. array[1, 1] = "tex";
  1481. array[2, 0] = "_ToonRamp";
  1482. array[2, 1] = "tex";
  1483. array[3, 0] = "_ShadowTex";
  1484. array[3, 1] = "tex";
  1485. array[4, 0] = "_ShadowRateToon";
  1486. array[4, 1] = "tex";
  1487. array[5, 0] = "_SpecularTex";
  1488. array[5, 1] = "tex";
  1489. array[6, 0] = "_AnisoTex";
  1490. array[6, 1] = "tex";
  1491. array[7, 0] = "_RenderTex";
  1492. array[7, 1] = "tex";
  1493. array[8, 0] = "_HiTex";
  1494. array[8, 1] = "tex";
  1495. array[9, 0] = "_OutlineTex";
  1496. array[9, 1] = "tex";
  1497. array[10, 0] = "_OutlineToonRamp";
  1498. array[10, 1] = "tex";
  1499. array[11, 0] = "_Color";
  1500. array[11, 1] = "col";
  1501. array[12, 0] = "_ShadowColor";
  1502. array[12, 1] = "col";
  1503. array[13, 0] = "_RimColor";
  1504. array[13, 1] = "col";
  1505. array[14, 0] = "_SpecColor";
  1506. array[14, 1] = "col";
  1507. array[15, 0] = "_Emission";
  1508. array[15, 1] = "col";
  1509. array[16, 0] = "_ReflectColor";
  1510. array[16, 1] = "col";
  1511. array[17, 0] = "_OutlineColor";
  1512. array[17, 1] = "col";
  1513. array[18, 0] = "_MyLightColor0";
  1514. array[18, 1] = "col";
  1515. array[19, 0] = "_MyLightColor1";
  1516. array[19, 1] = "col";
  1517. array[20, 0] = "_TintColor";
  1518. array[20, 1] = "col";
  1519. array[21, 0] = "_ShadowColor";
  1520. array[21, 1] = "col";
  1521. array[22, 0] = "_Shininess";
  1522. array[22, 1] = "f";
  1523. array[23, 0] = "_FurLength";
  1524. array[23, 1] = "f";
  1525. array[24, 0] = "_OutlineWidth";
  1526. array[24, 1] = "f";
  1527. array[25, 0] = "_Cutoff";
  1528. array[25, 1] = "f";
  1529. array[26, 0] = "_AnisoOffset";
  1530. array[26, 1] = "f";
  1531. array[27, 0] = "_RimPower";
  1532. array[27, 1] = "f";
  1533. array[28, 0] = "_RimShift";
  1534. array[28, 1] = "f";
  1535. array[29, 0] = "_HiRate";
  1536. array[29, 1] = "f";
  1537. array[30, 0] = "_HiPow";
  1538. array[30, 1] = "f";
  1539. Menu.material_properties = array;
  1540. }
  1541. public static SortedDictionary<int, SortedDictionary<string, string>> m_dicResourceRef = new SortedDictionary<int, SortedDictionary<string, string>>();
  1542. private static string[] m_strAllTexInFileSys = null;
  1543. private static string[,] material_properties;
  1544. [CompilerGenerated]
  1545. private static Func<string, string> <>f__mg$cache0;
  1546. private class LastParam
  1547. {
  1548. public LastParam(int f_nOrder, string f_strComm, params string[] f_argArgs)
  1549. {
  1550. this.nOrder = f_nOrder;
  1551. this.strComm = f_strComm;
  1552. this.aryArgs = new string[f_argArgs.Length];
  1553. f_argArgs.CopyTo(this.aryArgs, 0);
  1554. }
  1555. public int nOrder;
  1556. public string strComm = string.Empty;
  1557. public string[] aryArgs;
  1558. }
  1559. private enum IMode
  1560. {
  1561. Non,
  1562. ItemChange,
  1563. TexChange
  1564. }
  1565. }