Advertisement
Guest User

Untitled

a guest
May 27th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.83 KB | None | 0 0
  1. &CMD`DICE #40=
  2. $^\+(dice|roll)(( */[a-z0-9#]+( *= *([0-9a-z]+|\".+\"))?)*)( +((-?([0-9a-z\-\$\#\^\.]+|\"[0-9a-z\-\$\#\^\. ]+\"))( *[+-] *([0-9a-z\-\$\#\^
  3.  
  4. \.]+|\"[0-9a-z\-\$\#\^\. ]+\"))*)( +vs +((-?([0-9a-z\-\$\#\^\.]+|\"[0-9a-z\-\$\#\^\. ]+\"))( *[+-] *([0-9a-z\-\$\#\^\.]+|\"[0-9a-z\-\$\#\^\. ]+
  5.  
  6. \"))*))? *(= *(.+))? *)$:
  7. [setq(B,secure(%0))]
  8. [setq(z, u(F`PARSE`FLAGS, secure(%2)))]
  9. [setq(z, u(F`PARSE`DICE, secure(%7), D, V))]
  10. [setq(z, u(F`PARSE`CONTESTED, secure(%6)))]
  11. [setq(z, u(F`PARSE`SHOWLIST, %6))]
  12. [setq(z, u(F`BUILD`OUTPUT))]
  13. [pemit(%qL, %qO)]
  14. [u(F`ADD`TO`DICELOG,%qO)]
  15. [u(F`SEND`CHAN,%qC)]
  16. -
  17. @set #40/CMD`DICE=regexp
  18. -
  19. ---------------PARSE FLAGS---------------
  20. -
  21. &F`PARSE`FLAGS #40=
  22. [setq(Z,
  23. iter(
  24. %0,
  25. if(
  26. strlen(trim(itext(0))),
  27. u(F`FIND`FLAG, trim(lcstr(itext(0))))),
  28. /)
  29. )]
  30. -
  31. &F`FIND`FLAG #40=
  32. [setq(X,0)]
  33. [iter(
  34. lattr(me/F`TEST`FLAG`REG`*),
  35. if(
  36. u(itext(0), %0),
  37. u(edit(itext(0), F`TEST`FLAG`REG`, F`TEST`FLAG`MATCH`), %0))
  38. )]
  39. [switch(
  40. %qX,
  41. 0, setq(F, %qF%b/%[%0 - Flag not matched%]),
  42. 1, null(Single Match),
  43. setq(F, %qF%b/%[%0 - Multiple Flags Matched%])
  44. )]
  45. -
  46. &F`TEST`FLAG`REG`VERBOSE #40=
  47. regmatch(%0,^v(e(r(b(o(s(e)?)?)?)?)?)?$)
  48. -
  49. &F`TEST`FLAG`MATCH`VERBOSE #40=
  50. [setq(X,inc(%qX))][setq(0, 1)][setq(F, %qF%b/VERBOSE)]
  51. -
  52. &F`TEST`FLAG`REG`EXTENDED`TARGET #40=
  53. ifelse(
  54. pos(%bvs%b, %qB),
  55. regmatch(%0,^e(x(t(e(n(d(e(d)?)?)?)?)?)?)?# *= *((%[0-9%]+)vs(%[0-9%]+))$, -1 -1 -1 -1 -1 -1 -1 -1 Y),
  56. regmatch(%0,^e(x(t(e(n(d(e(d)?)?)?)?)?)?)?# *= *(%[0-9%]+)$, -1 -1 -1 -1 -1 -1 -1 -1 Y)
  57. )
  58. -
  59. &F`TEST`FLAG`MATCH`EXTENDED`TARGET #40=
  60. ifelse(
  61. ifelse(
  62. pos(%bvs%b, %qB),
  63. and(
  64. gte(first(%qY, vs), 1),
  65. lte(first(%qY, vs), 100),
  66. gte(last(%qY, vs), 1),
  67. lte(last(%qY, vs), 100)
  68. ),
  69. and(
  70. gte(%qY, 1),
  71. lte(%qY, 100)
  72. )
  73. ),
  74. [setq(X,inc(%qX))][setq(2, %qY)][setq(F, %qF%b/EXTENDED#=%q2)],
  75. [setq(X,inc(%qX))][setq(F, %qF%b/%[%0% - Value out of range %(1-100%)%])]
  76. )
  77. -
  78. &F`TEST`FLAG`REG`EXTENDED #40=
  79. regmatch(%0,^e(x(t(e(n(d(e(d)?)?)?)?)?)?)?( *= *(%[0-9%]+))?$, -1 -1 -1 -1 -1 -1 -1 -1 -1 Y)
  80. -
  81. &F`TEST`FLAG`MATCH`EXTENDED #40=
  82. ifelse(
  83. strlen(%qY),
  84. ifelse(
  85. and(gte(%qY,2),lte(%qY,100)),
  86. [setq(X,inc(%qX))][setq(1,%qY)][setq(F, %qF%b/EXTENDED=%q1)],
  87. [setq(X,inc(%qX))][setq(F, %qF%b/%[%0% - Value out of range %(2-100%)%])]
  88. ),
  89. [setq(X,inc(%qX))][setq(1,0)][setq(F, %qF%b/EXTENDED)]
  90. )
  91. -
  92. &F`TEST`FLAG`REG`WILLPOWER #40=
  93. regmatch(%0,^(w(i(l(l(p(o(w(e(r)?)?)?)?)?)?)?)?|wp)( *= *(%[0-9%]+))?$, -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Y)
  94. -
  95. &F`TEST`FLAG`MATCH`WILLPOWER #40=
  96. ifelse(
  97. strlen(%qY),
  98. ifelse(
  99. and(gte(%qY, 1), lte(%qY, setr(Z, u(F`GET`MAXWILLPOWER)))),
  100. [setq(X,inc(%qX))][setq(3, %qY)][setq(F, %qF%b/WILLPOWER[ifelse(gt(%q3, 1), =%q3,)])],
  101. [setq(X,inc(%qX))][setq(F, %qF%b/%[%0% - Value out of range %(1-%qZ%)%])]
  102. ),
  103. [setq(X,inc(%qX))][setq(3, 1)][setq(F, %qF%b/WILLPOWER)]
  104. )
  105. -
  106. &F`GET`MAXWILLPOWER #40=
  107. 10
  108. -
  109. &F`TEST`FLAG`REG`AGAIN #40=
  110. regmatch(%0,^a(g(a(i(n)?)?)?)? *= *(%[0-9%]+|none)$, -1 -1 -1 -1 -1 Y)
  111. -
  112. &F`TEST`FLAG`MATCH`AGAIN #40=
  113. ifelse(
  114. or(
  115. match(%qY, none),
  116. and(
  117. gte(%qY,1),
  118. lte(%qY,11)
  119. )
  120. ),
  121. [setq(X,inc(%qX))][setq(4, ifelse(match(%qY, none), 11, %qY))][setq(F, %qF%b/AGAIN=[ucstr(ifelse(eq(%q4, 11), none,
  122.  
  123. %q4))])],
  124. [setq(X,inc(%qX))][setq(F, %qF%b/%[%0% - Value out of range %(1-11%)%])]
  125. )
  126. -
  127. &F`TEST`FLAG`REG`9AGAIN #40=
  128. regmatch(%0,^9$)
  129. -
  130. &F`TEST`FLAG`MATCH`9AGAIN #40=
  131. [setq(X,inc(%qX))][setq(4, 9)][setq(F, %qF%b/AGAIN=%q4)]
  132. -
  133. &F`TEST`FLAG`REG`8AGAIN #40=
  134. regmatch(%0,^8$)
  135. -
  136. &F`TEST`FLAG`MATCH`8AGAIN #40=
  137. [setq(X,inc(%qX))][setq(4, 8)][setq(F, %qF%b/AGAIN=%q4)]
  138. -
  139. &F`TEST`FLAG`REG`NO`AGAIN #40=
  140. regmatch(%0,^(11|none)$)
  141. -
  142. &F`TEST`FLAG`MATCH`NO`AGAIN #40=
  143. [setq(X,inc(%qX))][setq(4, 11)][setq(F, %qF%b/AGAIN=NONE)]
  144. -
  145. &F`TEST`FLAG`REG`TARGET #40=
  146. regmatch(%0,^t(a(r(g(e(t)?)?)?)?)? *= *(%[0-9%]+)$, -1 -1 -1 -1 -1 -1 Y)
  147. -
  148. &F`TEST`FLAG`MATCH`TARGET #40=
  149. ifelse(
  150. and(
  151. gte(%qY,1),
  152. lte(%qY,10)
  153. ),
  154. [setq(X,inc(%qX))][setq(5, %qY)][setq(F, %qF%b/TARGET=%q5)],
  155. [setq(X,inc(%qX))][setq(F, %qF%b/%[%0% - Value out of range %(1-10%)%])]
  156. )
  157. -
  158. &F`TEST`FLAG`REG`ROTE #40=
  159. regmatch(%0,^r(o(t(e)?)?)?$)
  160. -
  161. &F`TEST`FLAG`MATCH`ROTE #40=
  162. [setq(X,inc(%qX))][setq(6, 1)][setq(F, %qF%b/ROTE)]
  163. -
  164. &F`TEST`FLAG`REG`SUBONES #40=
  165. regmatch(%0,^s(u(b(o(n(e(s)?)?)?)?)?)?$)
  166. -
  167. &F`TEST`FLAG`MATCH`SUBONES #40=
  168. [setq(X,inc(%qX))][setq(7, 1)][setq(F, %qF%b/SUBONES)]
  169. -
  170. &F`TEST`FLAG`REG`IGNOREWOUNDS #40=
  171. regmatch(%0,^i(g(n(o(r(e(w(o(u(n(d(s)?)?)?)?)?)?)?)?)?)?)?$)
  172. -
  173. &F`TEST`FLAG`MATCH`IGNOREWOUDS #40=
  174. [setq(X,inc(%qX))][setq(8, 1)][setq(F, %qF%b/IGNOREWOUNDS)]
  175. -
  176. &F`TEST`FLAG`REG`NOTE #40=
  177. regmatch(%0,^n(o(t(e)?)?)? *= *((.+)|\"(.+)\")?$, -1 -1 -1 -1 Y)
  178. -
  179. &F`TEST`FLAG`MATCH`NOTE #40=
  180. [setq(X,inc(%qX))][setq(N, %qY)][setq(F, %qF%b/NOTE)]
  181. -
  182. ---------------PARSE DICE---------------
  183. -
  184. &F`PARSE`DICE #40=
  185. [setq(%2, 0)]
  186. [setq(Z,
  187. iter(
  188. edit(edit(lcstr(%0), +, |), -, |-),
  189. if(
  190. strlen(trim(itext(0))),
  191. u(F`PARSE`DICE`PART, trim(itext(0)), inum(0), %1, %2)
  192. ),
  193. |
  194. )
  195. )]
  196. -
  197. &F`PARSE`DICE`PART #40=
  198. [ifelse(
  199. strmatch(mid(%0,0,1),-),
  200. [setq(X, -)][setq(Y, trim(mid(%0, 1, strlen(%0))))],
  201. [setq(X, +)][setq(Y,%0)]
  202. )]
  203. [ifelse(
  204. isnum(%qY),
  205. ifelse(
  206. lte(%qY, 100),
  207. u(F`ADD`CLEAN`DICE,%qX, %qY, %1, %qY, %2, %3),
  208. [setq(%2,
  209. [r(%2)]%b[ifelse(
  210. eq(strlen(r(%2)), 0),
  211. %[[if(strmatch(%qX,-), %qX)]%qY - Bad Monkey%],
  212. %[%qX%b%qY - Bad Monkey%]
  213. )]
  214. )]
  215. ),
  216. [u(F`PARSE`DICE`TEXT, %qX, %qY, %1, %2, %3)]
  217. )]
  218. -
  219. &F`ADD`CLEAN`DICE #40=
  220. [setq(%4,
  221. [r(%4)]%b[ifelse(
  222. eq(strlen(r(%4)), 0),
  223. [if(strmatch(%0,-), %0)]%1,
  224. %0%b%1
  225. )]
  226. )]
  227. [setq(%5, add(r(%5), %0%3))]
  228. -
  229. &F`PARSE`DICE`TEXT #40=
  230. [switch(
  231. 1,
  232. u(F`PARSE`DICE`TEXT`MATCH`STAT, %1), u(F`PARSE`DICE`TEXT`STAT, %0, %1, %2, %3, %4),
  233. u(F`PARSE`DICE`TEXT`MATCH`STAT`SPEC, %1), u(F`PARSE`DICE`TEXT`STAT`SPEC, %0, %1, %2, %3, %4),
  234. u(F`PARSE`DICE`TEXT`MATCH`OPP`STAT, %1), u(F`PARSE`DICE`TEXT`OPP`STAT, %0, %1, %2, %3, %4),
  235. u(F`PARSE`DICE`TEXT`MATCH`DBREF`STAT, %1), u(F`PARSE`DICE`TEXT`OPP`STAT, %0, %1, %2, %3, %4),
  236. [setq(%3,
  237. [r(%3)]%b[ifelse(
  238. eq(strlen(r(%3)), 0),
  239. %[[if(strmatch(%0,-), %0)]%1 - Not Matched%],
  240. %[%0%b%1 - Not Matched%]
  241. )]
  242. )]
  243. )]
  244. -
  245. &F`PARSE`DICE`TEXT`MATCH`STAT #40=
  246. regmatch(%0, ^(%[a-z%]+)$)
  247. -
  248. &F`PARSE`DICE`TEXT`STAT #40=
  249. ifelse(
  250. u(F`IS`VALID`STAT, %#, %1),
  251. u(F`ADD`CLEAN`DICE,%0, u(F`GET`STAT`FULL`NAME, %#, %1), %2, u(F`GET`STAT`VAL, %#, %1), %3, %4),
  252. [setq(%3,
  253. [r(%3)]%b[ifelse(
  254. eq(strlen(r(%3)), 0),
  255. %[[if(strmatch(%0,-), %0)]%1 - INVALID STAT%],
  256. %[%0%b%1%]
  257. )]
  258. )]
  259. )
  260. -
  261. &F`PARSE`DICE`TEXT`MATCH`STAT`SPEC #40=
  262. regmatch(%0, ^((%[a-z%]+)%\.(%[a-z%]+)|\"(%[a-z%]+)%\.(%[a-z %]+)\")$)
  263. -
  264. &F`PARSE`DICE`TEXT`STAT`SPEC #40=
  265. ifelse(
  266. and(
  267. u(F`IS`VALID`STAT, %#, setr(X, strip(first(%1, .), \"))),
  268. u(F`IS`VALID`SPEC, %#, setr(Y, strip(rest(%1, .), \")))
  269. ),
  270. u(F`ADD`CLEAN`DICE,%0, [u(F`GET`STAT`FULL`NAME, %#, %qX)].[u(F`GET`SPEC`FULL`NAME, %#, %qY)], %2, inc(u
  271.  
  272. (F`GET`STAT`VAL, %#, %qX)), %3, %4),
  273. [setq(%3,
  274. [r(%3)]%b[ifelse(
  275. eq(strlen(r(%3)), 0),
  276. %[[if(strmatch(%0,-), %0)]%1 - INVALID STAT or SPEC%],
  277. %[%0%b%1%]
  278. )]
  279. )]
  280. )
  281. -
  282. &F`PARSE`DICE`TEXT`MATCH`OPP`STAT #40=
  283. regmatch(%0, ^((%[0-9a-z\-\$\.%]+)%\^(%[a-z%]+)|\"(%[0-9a-z\-\$\. %]+) *%\^ *(%[a-z%]+)\")$)
  284. -
  285. &F`PARSE`DICE`TEXT`MATCH`DBREF`STAT #40=
  286. regmatch(%0, ^(#(%[0-9%]+)%\^(%[a-z%]+)(%\.%[a-z%]+)|\"#(%[0-9%]+) *%\^ *(%[a-z%]+)\")?$)
  287. -
  288. &F`PARSE`DICE`TEXT`OPP`STAT #40=
  289. ifelse(
  290. isdbref(
  291. setr(X, num(*[strip(first(%1, ^), \")]))
  292. ),
  293. ifelse(
  294. u(F`IS`VALID`STAT, %#, setr(Y, strip(rest(%1, ^), \"))),
  295. u(F`ADD`CLEAN`DICE,%0, [name(%qX)]^[u(F`GET`STAT`FULL`NAME, %qX, %qY)], %2, u(F`GET`STAT`VAL, %qX,
  296.  
  297. %qY), %3, %4),
  298. [setq(%3,
  299. [r(%3)]%b[ifelse(
  300. eq(strlen(r(%3)), 0),
  301. %[[if(strmatch(%0,-), %0)]%1 - INVALID STAT%],
  302. %[%0%b%1%]
  303. )]
  304. )]
  305. )
  306. ,
  307. [setq(%3,
  308. [r(%3)]%b[ifelse(
  309. eq(strlen(r(%3)), 0),
  310. %[[if(strmatch(%0,-), %0)]%1 - INVALID TARGET DBREF%],
  311. %[%0%b%1%]
  312. )]
  313. )]
  314. )
  315. -
  316. &F`IS`VALID`STAT #40=0
  317. -
  318. &F`IS`VALID`SPEC #40=0
  319. -
  320. &F`GET`STAT`FULL`NAME #40=FOO
  321. -
  322. &F`GET`SPEC`FULL`NAME #40=BAR
  323. -
  324. &F`GET`STAT`VAL #40=2
  325. -
  326.  
  327.  
  328.  
  329. &F`PARSE`CONTESTED #40=
  330. if(
  331. pos(vs, %0),
  332. ifelse(
  333. pos(=, %0),
  334. u(F`PARSE`DICE, mid(%0, inc(pos(vs, %0)), sub(sub(pos(=, %0), pos(vs, %0)),2)), C, U),
  335. u(F`PARSE`DICE, mid(%0, inc(pos(vs, %0)), strlen(%0)), C, U)
  336. )
  337. )
  338. -
  339. ---------------EVAL DICE---------------
  340. -
  341. &D`DEFAULT`AGAIN #40=
  342. 10
  343. -
  344. &D`DEFAULT`TN #40=
  345. 8
  346. -
  347. &D`DEFAULT`DICE #40=
  348. 10
  349. -
  350. &F`GET`WOUNDS #40=
  351. 0
  352. -
  353. &F`EVAL`DICE #40=
  354. [setq(Z, u(F`EVAL`DICE`OPTIONS))]
  355. [ifelse(
  356. strlen(%q1),
  357. u(F`EVAL`DICE`EXTENDED),
  358. ifelse(
  359. strlen(%qU),
  360. u(F`EVAL`DICE`CONTESTED),
  361. ifelse(
  362. lte(%qV, 0),
  363. [setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, R, T)],
  364. [setq(W, 0)][u(F`EVAL`DICE`ROLL, %qV, 0, R, T)]
  365. )
  366. )
  367. )]
  368. -
  369. &F`EVAL`DICE`OPTIONS #40=
  370. [if(
  371. and(
  372. gte(%q3, 1),
  373. not(strlen(%q1))
  374. ),
  375. [setq(V, add(%qV, 3))][setq(D, %qD%b+%b3)]
  376. )]
  377. [if(
  378. not(strlen(%q4)),
  379. setq(4, v(D`DEFAULT`AGAIN))
  380. )]
  381. [if(
  382. not(strlen(%q5)),
  383. [setq(5, v(D`DEFAULT`TN))]
  384. )]
  385. [if(
  386. lt(%q4, %q5),
  387. setq(5, %q4)
  388. )]
  389. [if(
  390. not(%q8),
  391. setq(V, add(%qV, u(F`GET`WOUNDS)))
  392. )]
  393. [if(
  394. gt(%qV, v(D`MAX`DICE)),
  395. setq(V, v(D`MAX`DICE))
  396. )]
  397. [if(
  398. gt(%qU, v(D`MAX`DICE)),
  399. setq(U, v(D`MAX`DICE))
  400. )]
  401. -
  402. &D`MAX`DICE #40=100
  403. -
  404. &D`DEFAULT`EXTENDED #40=6
  405. -
  406. &F`EVAL`DICE`EXTENDED #40=
  407. [ifelse(
  408. gt(%q1, 0),
  409. setq(I, %q1),
  410. ifelse(
  411. strlen(%qE),
  412. setq(I, %qE),
  413. setq(I, v(D`DEFAULT`EXTENDED))
  414. )
  415. )]
  416. [ifelse(
  417. strlen(%qU),
  418. u(F`EVAL`DICE`EXT`CONTESTED),
  419. [ifelse(
  420. lte(%qV, 0),
  421. iter(
  422. lnum(1,%qI),
  423. [u(F`CHECK`EXT`WP, inum(0))]
  424. [ifelse(
  425. lte(%qV, 0),
  426. [setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, R, T)],
  427. [setq(W, 0)][u(F`EVAL`DICE`ROLL, %qV, 0, R, T)]
  428. )]
  429. ),
  430. iter(
  431. lnum(1,%qI),
  432. [u(F`CHECK`EXT`WP, inum(0))][setq(W, 0)][u(F`EVAL`DICE`ROLL, %qV, 0, R, T)]
  433. )
  434. )]
  435. [u(F`CHECK`EXT`TARGET, R, T, 0)]
  436. )]
  437.  
  438. -
  439. &F`CHECK`EXT`TARGET #40=
  440. [if(
  441. strlen(%q2),
  442. [setq(X, 0)]
  443. [setq(Y,)]
  444. [iter(
  445. rest(r(%1), |),
  446. if(
  447. not(strlen(%qY)),
  448. if(
  449. gte(
  450. setr(X, add(%qX, itext(0))),
  451. switch(
  452. %2,
  453. 0, %q2,
  454. 1, first(%q2, vs),
  455. 2, last(%q2, vs)
  456. )
  457. ),
  458. setq(Y, inum(0))
  459. )
  460. ),
  461. |
  462. )]
  463. [if(%qY, setq(%0, |[extract(r(%0), 2, %qY, |)]))]
  464. [if(%qY, setq(%1, |[extract(r(%1), 2, %qY, |)]))]
  465. )]
  466. -
  467. &F`CHECK`EXT`WP #40=
  468. [if(
  469. and(
  470. gt(%q3, 0),
  471. eq(%0, inc(sub(%qI, %q3)))
  472. ),
  473. setq(V, add(%qv, 3))
  474. )]
  475. -
  476. &F`EVAL`DICE`EXT`CONTESTED #40=
  477. [ifelse(
  478. lte(%qV, 0),
  479. [iter(
  480. lnum(1,%qI),
  481. [u(F`CHECK`EXT`WP, inum(0))][setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, R, T)]
  482. )]
  483. [ifelse(
  484. lte(%qU, 0),
  485. [iter(
  486. lnum(1,%qI),
  487. [setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, Q, S)]
  488. )],
  489. [iter(
  490. lnum(1,%qI),
  491. [setq(W, 0)][u(F`EVAL`DICE`ROLL, %qU, 0, Q, S)]
  492. )]
  493. )],
  494. [iter(
  495. lnum(1,%qI),
  496. [u(F`CHECK`EXT`WP, inum(0))][setq(W, 0)][u(F`EVAL`DICE`ROLL, %qV, 0, R, T)]
  497. )]
  498. [ifelse(
  499. lte(%qU, 0),
  500. [iter(
  501. lnum(1,%qI),
  502. [setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, Q, S)]
  503. )],
  504. [iter(
  505. lnum(1,%qI),
  506. [setq(W, 0)][u(F`EVAL`DICE`ROLL, %qU, 0, Q, S)]
  507. )]
  508. )]
  509. )]
  510. [u(F`CHECK`EXT`TARGET, R, T, 1)]
  511. [u(F`CHECK`EXT`TARGET, Q, S, 2)]
  512. -
  513. &F`EVAL`DICE`CONTESTED #40=
  514. ifelse(
  515. lte(%qV, 0),
  516. [setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, R, T)]
  517. [ifelse(
  518. lte(%qU, 0),
  519. [setq(W, 0)][u(F`EVAL`DICE`CHANCE, 0, Q, S)],
  520. [setq(W, 0)][u(F`EVAL`DICE`ROLL, %qU, 0, Q, S)]
  521. )],
  522. [setq(W, 0)][u(F`EVAL`DICE`ROLL, %qV, 0, R, T)][setq(W, 0)][u(F`EVAL`DICE`ROLL, %qU, 0, Q, S)]
  523. )
  524. -
  525. &F`EVAL`DICE`CHANCE #40=
  526. [setq(Z, rand(1, v(D`DEFAULT`DICE)))]
  527. [ifelse(
  528. eq(%0, 0),
  529. [setq(%1, [r(%1)]|%qZ:)]
  530. [switch(
  531. %qZ,
  532. 1, setq(%2, [r(%2)]|-1),
  533. 10, [setq(W, 1)][u(F`EVAL`DICE`CHANCE, inc(%0), %1, %2)],
  534. setq(%2, [r(%2)]|0)
  535. )],
  536. [setq(%1, [r(%1)]%b%qZ)]
  537. [switch(
  538. %qZ,
  539. 10, [setq(W, inc(%qW))][u(F`EVAL`DICE`CHANCE, inc(%0), %1, %2)],
  540. setq(%2, [r(%2)]|%qW)
  541. )]
  542. )]
  543. -
  544. &F`EVAL`DICE`ROLL #40=
  545. [setq(Z,
  546. sort(
  547. iter(
  548. lnum(1, %0),
  549. rand(1, v(D`DEFAULT`DICE))
  550. )
  551. )
  552. )]
  553. [ifelse(
  554. eq(%1, 0),
  555. [setq(%2, [r(%2)]|%qZ:)],
  556. [setq(%2, [r(%2)]%b%qZ)]
  557. )]
  558. [setq(Y, 0)]
  559. [iter(
  560. %qZ,
  561. u(F`EVAL`DICE`SINGLE, itext(0), %1, %2, W)
  562. )]
  563. [ifelse(
  564. %qY,
  565. u(F`EVAL`DICE`ROLL, %qY, inc(%1), %2, %3),
  566. [setq(%3, [r(%3)]|%qW)]
  567. )]
  568. -
  569. &F`EVAL`DICE`SINGLE #40=
  570. [if(
  571. gte(%0, %q5),
  572. setq(%3, inc(r(%3)))
  573. )]
  574. [if(
  575. gte(%0, %q4),
  576. setq(Y, inc(%qY))
  577. )]
  578. [if(
  579. and(
  580. lt(%0, %q5),
  581. eq(%1, 0),
  582. %q6
  583. ),
  584. setq(Y, inc(%qY))
  585. )]
  586. [if(
  587. and(
  588. eq(%0, 1),
  589. gt(r(%3), 0),
  590. %q7
  591. ),
  592. setq(%3, dec(r(%3)))
  593. )]
  594. -
  595. ---------------PARSE TO SHOW LIST---------------
  596. -
  597. &F`PARSE`SHOWLIST #40=
  598. [setq(L, %#)]
  599. [if(
  600. pos(=, %0),
  601. setq(X, mid(%0, pos(=, %0), strlen(%0)))
  602. )]
  603. [ifelse(
  604. strlen(trim(%qX)),
  605. setq(Z,
  606. iter(
  607. %qX,
  608. if(
  609. isdbref(setr(Y, num(*[trim(itext(0))]))),
  610. setq(L, %qL%b%qY)
  611. ),
  612. %,
  613. )
  614. ),
  615. setq(L, lcon(loc(%#), CONNECT))
  616. )]
  617. -
  618. ---------------OUTPUTS---------------
  619. -
  620. &F`BUILD`OUTPUT #40=
  621. [setq(Z, u(F`EVAL`DICE))]
  622. [setq(O, Flags: [trim(%qF)]%rDice: %qD %(%qV%)%rVersus Dice: %qC %(%qU%)%rRoll: [rest(%qR, |)]%rSucc: [rest(%qT,
  623.  
  624. |)]%rVRoll: [rest(%qQ, |)]%rVSucc: [rest(%qS, |)]%rNote: [trim(%qN)]%rTo: %qL | [iter(%qL,name(##),%b,%,%b)])]
  625. -
  626. &F`ADD`TO`DICELOG #40=
  627. [setq(Z,)]
  628. -
  629. &F`SEND`CHAN #40=
  630. [setq(Z,)]
  631. -
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement