Argument.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using NTERA.EmuEra.Game.EraEmu.GameData.Expression;
  5. using NTERA.EmuEra.Game.EraEmu.GameData.Function;
  6. using NTERA.EmuEra.Game.EraEmu.GameData.Variable;
  7. namespace NTERA.EmuEra.Game.EraEmu.GameProc.Function
  8. {
  9. internal abstract class Argument
  10. {
  11. public bool IsConst;
  12. public string ConstStr;
  13. public Int64 ConstInt;
  14. }
  15. internal sealed class VoidArgument : Argument
  16. {
  17. }
  18. internal sealed class ErrorArgument : Argument
  19. {
  20. public ErrorArgument(string errorMes)
  21. {
  22. this.errorMes = errorMes;
  23. }
  24. readonly string errorMes;
  25. }
  26. internal sealed class ExpressionArgument : Argument
  27. {
  28. public ExpressionArgument(IOperandTerm termSrc)
  29. {
  30. Term = termSrc;
  31. }
  32. public readonly IOperandTerm Term;
  33. }
  34. internal sealed class ExpressionArrayArgument : Argument
  35. {
  36. public ExpressionArrayArgument(List<IOperandTerm> termList)
  37. {
  38. TermList = new IOperandTerm[termList.Count];
  39. termList.CopyTo(TermList);
  40. }
  41. public readonly IOperandTerm[] TermList;
  42. }
  43. internal sealed class SpPrintVArgument : Argument
  44. {
  45. public SpPrintVArgument(IOperandTerm[] list)
  46. {
  47. Terms = list;
  48. }
  49. public readonly IOperandTerm[] Terms;
  50. }
  51. internal sealed class SpTimesArgument : Argument
  52. {
  53. public SpTimesArgument(VariableTerm var, double d)
  54. {
  55. VariableDest = var;
  56. DoubleValue = d;
  57. }
  58. public readonly VariableTerm VariableDest;
  59. public readonly double DoubleValue;
  60. }
  61. internal sealed class SpBarArgument : Argument
  62. {
  63. public SpBarArgument(IOperandTerm value, IOperandTerm max, IOperandTerm length)
  64. {
  65. Terms[0] = value;
  66. Terms[1] = max;
  67. Terms[2] = length;
  68. }
  69. public readonly IOperandTerm[] Terms = new IOperandTerm[3];
  70. }
  71. internal sealed class SpSwapCharaArgument : Argument
  72. {
  73. public SpSwapCharaArgument(IOperandTerm x, IOperandTerm y)
  74. {
  75. X = x;
  76. Y = y;
  77. }
  78. public readonly IOperandTerm X;
  79. public readonly IOperandTerm Y;
  80. }
  81. internal sealed class SpSwapVarArgument : Argument
  82. {
  83. public SpSwapVarArgument(VariableTerm v1, VariableTerm v2)
  84. {
  85. var1 = v1;
  86. var2 = v2;
  87. }
  88. public readonly VariableTerm var1;
  89. public readonly VariableTerm var2;
  90. }
  91. internal sealed class SpVarsizeArgument : Argument
  92. {
  93. public SpVarsizeArgument(VariableToken var)
  94. {
  95. VariableID = var;
  96. }
  97. public readonly VariableToken VariableID;
  98. }
  99. internal sealed class SpSaveDataArgument : Argument
  100. {
  101. public SpSaveDataArgument(IOperandTerm target, IOperandTerm var)
  102. {
  103. Target = target;
  104. StrExpression = var;
  105. }
  106. public readonly IOperandTerm Target;
  107. public readonly IOperandTerm StrExpression;
  108. }
  109. internal sealed class SpTInputsArgument : Argument
  110. {
  111. public SpTInputsArgument(IOperandTerm time, IOperandTerm def, IOperandTerm disp, IOperandTerm timeout)
  112. {
  113. Time = time;
  114. Def = def;
  115. Disp = disp;
  116. Timeout = timeout;
  117. }
  118. public readonly IOperandTerm Time;
  119. public readonly IOperandTerm Def;
  120. public readonly IOperandTerm Disp;
  121. public readonly IOperandTerm Timeout;
  122. }
  123. //難読化用属性。enum.ToString()やenum.Parse()を行うなら(Exclude=true)にすること。
  124. [Obfuscation(Exclude = false)]
  125. internal enum SortOrder
  126. {
  127. UNDEF = 0,
  128. ASCENDING = 1,
  129. DESENDING = 2
  130. }
  131. internal sealed class SpSortcharaArgument : Argument
  132. {
  133. public SpSortcharaArgument(VariableTerm var, SortOrder order)
  134. {
  135. SortKey = var;
  136. SortOrder = order;
  137. }
  138. public readonly VariableTerm SortKey;
  139. public readonly SortOrder SortOrder;
  140. }
  141. internal sealed class SpCallFArgment : Argument
  142. {
  143. public SpCallFArgment(IOperandTerm funcname, IOperandTerm[] subNames, IOperandTerm[] args)
  144. {
  145. FuncnameTerm = funcname;
  146. SubNames = subNames;
  147. RowArgs = args;
  148. }
  149. public readonly IOperandTerm FuncnameTerm;
  150. public readonly IOperandTerm[] SubNames;
  151. public readonly IOperandTerm[] RowArgs;
  152. public IOperandTerm FuncTerm;
  153. }
  154. internal sealed class SpCallArgment : Argument
  155. {
  156. public SpCallArgment(IOperandTerm funcname, IOperandTerm[] subNames, IOperandTerm[] args)
  157. {
  158. FuncnameTerm = funcname;
  159. SubNames = subNames;
  160. RowArgs = args;
  161. }
  162. public readonly IOperandTerm FuncnameTerm;
  163. public readonly IOperandTerm[] SubNames;
  164. public readonly IOperandTerm[] RowArgs;
  165. public UserDefinedFunctionArgument UDFArgument;
  166. public CalledFunction CallFunc;
  167. }
  168. internal sealed class SpForNextArgment : Argument
  169. {
  170. public SpForNextArgment(VariableTerm var, IOperandTerm start, IOperandTerm end, IOperandTerm step)
  171. {
  172. Cnt = var;
  173. Start = start;
  174. End = end;
  175. Step = step;
  176. }
  177. public readonly VariableTerm Cnt;
  178. public readonly IOperandTerm Start;
  179. public readonly IOperandTerm End;
  180. public readonly IOperandTerm Step;
  181. }
  182. internal sealed class SpPowerArgument : Argument
  183. {
  184. public SpPowerArgument(VariableTerm var, IOperandTerm x, IOperandTerm y)
  185. {
  186. VariableDest = var;
  187. X = x;
  188. Y = y;
  189. }
  190. public readonly VariableTerm VariableDest;
  191. public readonly IOperandTerm X;
  192. public readonly IOperandTerm Y;
  193. }
  194. internal sealed class CaseArgument : Argument
  195. {
  196. public CaseArgument(CaseExpression[] args)
  197. {
  198. CaseExps = args;
  199. }
  200. public readonly CaseExpression[] CaseExps;
  201. }
  202. internal sealed class PrintDataArgument : Argument
  203. {
  204. public PrintDataArgument(VariableTerm var)
  205. {
  206. Var = var;
  207. }
  208. public readonly VariableTerm Var;
  209. }
  210. internal sealed class StrDataArgument : Argument
  211. {
  212. public StrDataArgument(VariableTerm var)
  213. {
  214. Var = var;
  215. }
  216. public readonly VariableTerm Var;
  217. }
  218. internal sealed class MethodArgument : Argument
  219. {
  220. public MethodArgument(IOperandTerm method)
  221. {
  222. MethodTerm = method;
  223. }
  224. public readonly IOperandTerm MethodTerm;
  225. }
  226. internal sealed class BitArgument : Argument
  227. {
  228. public BitArgument(VariableTerm var, IOperandTerm[] termSrc)
  229. {
  230. VariableDest = var;
  231. Term = termSrc;
  232. }
  233. public readonly VariableTerm VariableDest;
  234. public readonly IOperandTerm[] Term;
  235. }
  236. internal sealed class SpVarSetArgument : Argument
  237. {
  238. public SpVarSetArgument(VariableTerm var, IOperandTerm termSrc, IOperandTerm start, IOperandTerm end)
  239. {
  240. VariableDest = var;
  241. Term = termSrc;
  242. Start = start;
  243. End = end;
  244. }
  245. public readonly VariableTerm VariableDest;
  246. public readonly IOperandTerm Term;
  247. public readonly IOperandTerm Start;
  248. public readonly IOperandTerm End;
  249. }
  250. internal sealed class SpCVarSetArgument : Argument
  251. {
  252. public SpCVarSetArgument(VariableTerm var, IOperandTerm indexTerm, IOperandTerm termSrc, IOperandTerm start, IOperandTerm end)
  253. {
  254. VariableDest = var;
  255. Index = indexTerm;
  256. Term = termSrc;
  257. Start = start;
  258. End = end;
  259. }
  260. public readonly VariableTerm VariableDest;
  261. public readonly IOperandTerm Index;
  262. public readonly IOperandTerm Term;
  263. public readonly IOperandTerm Start;
  264. public readonly IOperandTerm End;
  265. }
  266. internal sealed class SpButtonArgument : Argument
  267. {
  268. public SpButtonArgument(IOperandTerm p1, IOperandTerm p2)
  269. {
  270. PrintStrTerm = p1;
  271. ButtonWord = p2;
  272. }
  273. public readonly IOperandTerm PrintStrTerm;
  274. public readonly IOperandTerm ButtonWord;
  275. }
  276. internal sealed class SpColorArgument : Argument
  277. {
  278. public SpColorArgument(IOperandTerm r, IOperandTerm g, IOperandTerm b)
  279. {
  280. R = r;
  281. G = g;
  282. B = b;
  283. }
  284. public SpColorArgument(IOperandTerm rgb)
  285. {
  286. RGB = rgb;
  287. }
  288. public readonly IOperandTerm R;
  289. public readonly IOperandTerm G;
  290. public readonly IOperandTerm B;
  291. public readonly IOperandTerm RGB;
  292. }
  293. internal sealed class SpSplitArgument : Argument
  294. {
  295. public SpSplitArgument(IOperandTerm s1, IOperandTerm s2, VariableToken varId, VariableTerm num)
  296. {
  297. TargetStr = s1;
  298. Split = s2;
  299. Var = varId;
  300. Num = num;
  301. }
  302. public readonly IOperandTerm TargetStr;
  303. public readonly IOperandTerm Split;
  304. public readonly VariableToken Var;
  305. public readonly VariableTerm Num;
  306. }
  307. internal sealed class SpHtmlSplitArgument : Argument
  308. {
  309. public SpHtmlSplitArgument(IOperandTerm s1,VariableToken varId, VariableTerm num)
  310. {
  311. TargetStr = s1;
  312. Var = varId;
  313. Num = num;
  314. }
  315. public readonly IOperandTerm TargetStr;
  316. public readonly VariableToken Var;
  317. public readonly VariableTerm Num;
  318. }
  319. internal sealed class SpGetIntArgument : Argument
  320. {
  321. public SpGetIntArgument(VariableTerm var)
  322. {
  323. VarToken = var;
  324. }
  325. public readonly VariableTerm VarToken;
  326. }
  327. internal sealed class SpArrayControlArgument : Argument
  328. {
  329. public SpArrayControlArgument(VariableTerm var, IOperandTerm num1, IOperandTerm num2)
  330. {
  331. VarToken = var;
  332. Num1 = num1;
  333. Num2 = num2;
  334. }
  335. public readonly VariableTerm VarToken;
  336. public readonly IOperandTerm Num1;
  337. public readonly IOperandTerm Num2;
  338. }
  339. internal sealed class SpArrayShiftArgument : Argument
  340. {
  341. public SpArrayShiftArgument(VariableTerm var, IOperandTerm num1, IOperandTerm num2, IOperandTerm num3, IOperandTerm num4)
  342. {
  343. VarToken = var;
  344. Num1 = num1;
  345. Num2 = num2;
  346. Num3 = num3;
  347. Num4 = num4;
  348. }
  349. public readonly VariableTerm VarToken;
  350. public readonly IOperandTerm Num1;
  351. public readonly IOperandTerm Num2;
  352. public readonly IOperandTerm Num3;
  353. public readonly IOperandTerm Num4;
  354. }
  355. internal sealed class SpArraySortArgument : Argument
  356. {
  357. public SpArraySortArgument(VariableTerm var, SortOrder order, IOperandTerm num1, IOperandTerm num2)
  358. {
  359. VarToken = var;
  360. Order = order;
  361. Num1 = num1;
  362. Num2 = num2;
  363. }
  364. public readonly VariableTerm VarToken;
  365. public readonly SortOrder Order;
  366. public readonly IOperandTerm Num1;
  367. public readonly IOperandTerm Num2;
  368. }
  369. internal sealed class SpCopyArrayArgument : Argument
  370. {
  371. public SpCopyArrayArgument(IOperandTerm str1, IOperandTerm str2)
  372. {
  373. VarName1 = str1;
  374. VarName2 = str2;
  375. }
  376. public readonly IOperandTerm VarName1;
  377. public readonly IOperandTerm VarName2;
  378. }
  379. internal sealed class SpSaveVarArgument : Argument
  380. {
  381. public SpSaveVarArgument(IOperandTerm term, IOperandTerm mes, VariableToken[] varTokens)
  382. {
  383. Term = term;
  384. SavMes = mes;
  385. VarTokens = varTokens;
  386. }
  387. public readonly IOperandTerm Term;
  388. public readonly IOperandTerm SavMes;
  389. public readonly VariableToken[] VarTokens;
  390. }
  391. internal sealed class RefArgument : Argument
  392. {
  393. public RefArgument(UserDefinedRefMethod udrm, UserDefinedRefMethod src)
  394. {
  395. RefMethodToken = udrm;
  396. SrcRefMethodToken = src;
  397. }
  398. public RefArgument(UserDefinedRefMethod udrm, CalledFunction src)
  399. {
  400. RefMethodToken = udrm;
  401. SrcCalledFunction = src;
  402. }
  403. public RefArgument(UserDefinedRefMethod udrm, IOperandTerm src)
  404. {
  405. RefMethodToken = udrm;
  406. SrcTerm = src;
  407. }
  408. public RefArgument(ReferenceToken vt, VariableToken src)
  409. {
  410. RefVarToken = vt;
  411. SrcVarToken = src;
  412. }
  413. public RefArgument(ReferenceToken vt, IOperandTerm src)
  414. {
  415. RefVarToken = vt;
  416. SrcTerm = src;
  417. }
  418. public readonly UserDefinedRefMethod RefMethodToken;
  419. public readonly UserDefinedRefMethod SrcRefMethodToken;
  420. public readonly CalledFunction SrcCalledFunction;
  421. public readonly ReferenceToken RefVarToken;
  422. public readonly VariableToken SrcVarToken;
  423. public readonly IOperandTerm SrcTerm;
  424. }
  425. internal sealed class OneInputArgument : Argument
  426. {
  427. public OneInputArgument(IOperandTerm term, IOperandTerm flag)
  428. {
  429. Term = term;
  430. Flag = flag;
  431. }
  432. public readonly IOperandTerm Term;
  433. public readonly IOperandTerm Flag;
  434. }
  435. internal sealed class OneInputsArgument : Argument
  436. {
  437. public OneInputsArgument(IOperandTerm term, IOperandTerm flag)
  438. {
  439. Term = term;
  440. Flag = flag;
  441. }
  442. public readonly IOperandTerm Term;
  443. public readonly IOperandTerm Flag;
  444. }
  445. #region set系
  446. internal sealed class SpSetArgument : Argument
  447. {
  448. public SpSetArgument(VariableTerm var, IOperandTerm termSrc)
  449. {
  450. VariableDest = var;
  451. Term = termSrc;
  452. }
  453. public readonly VariableTerm VariableDest;
  454. public readonly IOperandTerm Term;
  455. public bool AddConst = false;
  456. }
  457. internal sealed class SpSetArrayArgument : Argument
  458. {
  459. public SpSetArrayArgument(VariableTerm var, IOperandTerm[] termList, Int64[] constList)
  460. {
  461. VariableDest = var;
  462. TermList = termList;
  463. ConstIntList = constList;
  464. }
  465. public SpSetArrayArgument(VariableTerm var, IOperandTerm[] termList, string[] constList)
  466. {
  467. VariableDest = var;
  468. TermList = termList;
  469. ConstStrList = constList;
  470. }
  471. public readonly VariableTerm VariableDest;
  472. public readonly IOperandTerm[] TermList;
  473. public readonly Int64[] ConstIntList;
  474. public readonly string[] ConstStrList;
  475. }
  476. #endregion
  477. }