uniutil.qsrc 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. # uniutil
  2. if $ARGS[0] = 'eligible_for_university':
  3. RESULT = func('uniutil', 'student', 'status') = 0 and func('uniutil', 'diploma', 'obtained') = 0 and (age >= 17 or fakepassport = 1)
  4. end
  5. if $ARGS[0] = 'prepclass':
  6. if $ARGS[1] = 'cost':
  7. RESULT = 15000
  8. end
  9. if $ARGS[1] = 'closing_hour':
  10. RESULT = 21
  11. end
  12. if $ARGS[1] = 'is_enrolled':
  13. RESULT = prepclassstats['enrolled'] = 1
  14. end
  15. if $ARGS[1] = 'set_enrolled':
  16. prepclassstats['enrolled'] = ARGS[2]
  17. end
  18. if $ARGS[1] = 'count':
  19. RESULT = prepclassstats['count']
  20. end
  21. if $ARGS[1] = 'set_count':
  22. prepclassstats['count'] = ARGS[2]
  23. end
  24. if $ARGS[1] = 'update_count':
  25. gs 'uniutil', 'prepclass', 'set_count', func('uniutil', 'prepclass', 'count') + 1
  26. end
  27. if $ARGS[1] = 'enroll':
  28. money -= func('uniutil', 'prepclass', 'cost')
  29. gs 'uniutil', 'prepclass', 'set_enrolled', 1
  30. gs 'uniutil', 'prepclass', 'set_count', 0
  31. end
  32. if $ARGS[1] = 'unenroll':
  33. killvar 'prepclassstats'
  34. end
  35. if $ARGS[1] = 'offered_this_month':
  36. RESULT = month <= func('uniutil', 'entrance_exam', 'month')
  37. end
  38. if $ARGS[1] = 'offered_today':
  39. RESULT = func('uniutil', 'entrance_exam', 'offered_this_month') and week < 6
  40. end
  41. if $ARGS[1] = 'in_session':
  42. RESULT = func('uniutil', 'prepclass', 'offered_today') and hour < func('uniutil', 'prepclass', 'closing_hour')
  43. end
  44. end
  45. if $ARGS[0] = 'entrance_exam':
  46. if $ARGS[1] = 'month':
  47. RESULT = 8
  48. end
  49. if $ARGS[1] = 'offered_today':
  50. RESULT = month = func('uniutil', 'entrance_exam', 'month')
  51. end
  52. if $ARGS[1] = 'is_passed':
  53. RESULT = pcs_intel + func('uniutil', 'prepclass', 'count') >= 60
  54. end
  55. if $ARGS[1] = 'print_month':
  56. $RESULT = $monthName[func('uniutil', 'entrance_exam', 'month')]
  57. end
  58. end
  59. !! The legacy vars are the vars used by the university before the vars were largely consolidated into
  60. !! arrays with string indices. This function exists to avoid breaking old save files with this change,
  61. !! which was made in September 2020. It can be removed whenever it is felt enough time has passed.
  62. if $ARGS[0] = 'transfer_legacy_vars':
  63. if abiturient > 0:
  64. gs 'uniutil', 'prepclass', 'set_enrolled', 1
  65. gs 'uniutil', 'prepclass', 'set_count', abiturient - 1
  66. end
  67. killvar 'abiturient'
  68. if kurs > 0:
  69. if (semestr = 1 and month < func('uniutil', 'entrance_exam', 'month')) or (semestr = 2 and month > func('uniutil', 'exam', 'month', 2)):
  70. !! under the old system, the semestr variable was advanced when the exam was passed, so if the
  71. !! variable is set to a value that does not match the current month, the player skipped the exam
  72. !! and is expelled
  73. gs 'uniutil', 'student', 'set_status', -2
  74. killvar 'unisemestrstats'
  75. elseif semestr = 2 and month = func('uniutil', 'exam', 'month', 1):
  76. !! semestr = 2 in first semester exam month in the old system indicates that its still the first
  77. !! semester (time-wise) but the exam has been passed, so we set the new variables accordingly.
  78. gs 'uniutil', 'semester', 'set', 1
  79. gs 'uniutil', 'attendance', 'reset'
  80. gs 'uniutil', 'assignment_progress', 'reset'
  81. gs 'uniutil', 'assignments_done', 'reset'
  82. gs 'uniutil', 'semester_result', 'set_passed'
  83. gs 'uniutil', 'passed_semesters', 'set', 0
  84. else
  85. gs 'uniutil', 'semester', 'set', semestr
  86. gs 'uniutil', 'attendance', 'set', lektor
  87. gs 'uniutil', 'assignment_progress', 'set', kursovik
  88. gs 'uniutil', 'assignments_done', 'set', kursovikD
  89. gs 'uniutil', 'semester_result', 'reset'
  90. gs 'uniutil', 'passed_semesters', 'set', iif(semestr = 2, 1, 0)
  91. end
  92. gs 'uniutil', 'semester', 'update_year'
  93. gs 'uniutil', 'scholarship', 'set', iif(stipuha = 1, func('uniutil', 'scholarship', 'honors_value'), 0)
  94. end
  95. killvar 'kurs'
  96. killvar 'semestr'
  97. killvar 'stipuha'
  98. killvar 'lektor'
  99. killvar 'kursovik'
  100. killvar 'kursovikD'
  101. killvar 'examen'
  102. end
  103. if $ARGS[0] = 'check_semester_vs_date':
  104. if year > func('uniutil', 'semester', 'get_year') + 1:
  105. !! if year has advanced by more than one since a semester was finished, semesters were skipped.
  106. RESULT = -1
  107. exit
  108. end
  109. unilect_sm = func('uniutil', 'lecture', 'start_month', func('uniutil', 'semester', 'get'))
  110. uniexam_m = func('uniutil', 'exam', 'month', func('uniutil', 'semester', 'get'))
  111. uniexam_mns = func('uniutil', 'exam', 'month', func('uniutil','semester', 'next'))
  112. if year = func('uniutil', 'semester', 'get_year') + 1:
  113. if month > uniexam_m mod 12 and func('uniutil', 'semester_passed') and month <= uniexam_mns:
  114. !! the semester was passed and the next one is not over
  115. RESULT = 1
  116. elseif month <= uniexam_m:
  117. !! the semester is still in progress
  118. RESULT = 0
  119. else
  120. !! expelled
  121. RESULT = -1
  122. end
  123. else
  124. if unilect_sm > uniexam_m or month <= uniexam_m:
  125. !! The semester is still in progress
  126. RESULT = 0
  127. elseif func('uniutil', 'semester_result', 'is_passed') and (uniexam_m > uniexam_mns or month <= uniexam_mns):
  128. !! the semester was passed and the next one is not over
  129. RESULT = 1
  130. else
  131. !! expelled
  132. RESULT = -1
  133. end
  134. end
  135. killvar 'unilect_sm'
  136. killvar 'uniexam_m'
  137. killvar 'uniexam_mns'
  138. end
  139. if $ARGS[0] = 'student':
  140. if $ARGS[1] = 'status':
  141. if student > 0:
  142. uni_semvdateres = func('uniutil', 'check_semester_vs_date')
  143. if uni_semvdateres < 0:
  144. !! date indicates semester exam skipped
  145. gs 'uniutil', 'student', 'expel'
  146. elseif uni_semvdateres > 0:
  147. !! date indicates semester exam passed and next semester started
  148. gs 'uniutil', 'semester', 'update'
  149. gs 'uniutil', 'semester', 'update_year'
  150. gs 'uniutil', 'semester_result', 'reset'
  151. gs 'uniutil', 'passed_semesters', 'update'
  152. else
  153. !! date indicates semester is still in progress
  154. gs 'uniutil', 'semester', 'update_year'
  155. end
  156. killvar 'uni_semvdateres'
  157. end
  158. RESULT = student
  159. end
  160. if $ARGS[1] = 'set_status':
  161. student = ARGS[2]
  162. end
  163. if $ARGS[1] = 'enroll':
  164. gs 'uniutil', 'prepclass', 'unenroll'
  165. gs 'uniutil', 'student', 'set_status', 1
  166. gs 'uniutil', 'semester', 'set', 1
  167. gs 'uniutil', 'semester', 'update_year'
  168. gs 'uniutil', 'scholarship', 'reset'
  169. gs 'uniutil', 'attendance', 'reset'
  170. gs 'uniutil', 'assignment_progress', 'reset'
  171. gs 'uniutil', 'assignments_done', 'reset'
  172. gs 'uniutil', 'semester_result', 'reset'
  173. end
  174. if $ARGS[1] = 'unenroll':
  175. gs 'uniutil', 'prepclass', 'unenroll'
  176. if student > 0:
  177. killvar 'student'
  178. killvar 'unisemestrstats'
  179. end
  180. end
  181. if $ARGS[1] = 'expel':
  182. if func('uniutil', 'semester_result', 'is_failed'):
  183. gs 'uniutil', 'student', 'unenroll'
  184. gs 'uniutil', 'student', 'set_status', -1
  185. elseif func('uniutil', 'check_semester_vs_date') < 0:
  186. gs 'uniutil', 'student', 'unenroll'
  187. gs 'uniutil', 'student', 'set_status', -2
  188. else
  189. gs 'uniutil', 'student', 'unenroll'
  190. gs 'uniutil', 'student', 'set_status', -3
  191. end
  192. end
  193. if $ARGS[1] = 'graduate':
  194. gs 'uniutil', 'student', 'unenroll'
  195. gs 'uniutil', 'diploma', 'set_obtained'
  196. end
  197. if $ARGS[1] = 'expelled_for_failing':
  198. RESULT = func('uniutil', 'student', 'status') = -1
  199. end
  200. if $ARGS[1] = 'expelled_for_skipping':
  201. RESULT = func('uniutil', 'student', 'status') = -2
  202. end
  203. if $ARGS[1] = 'expelled_for_other_reason':
  204. RESULT = func('uniutil', 'student', 'status') = -3
  205. end
  206. if $ARGS[1] = 'enrolled':
  207. RESULT = func('uniutil', 'student', 'status') > 0
  208. end
  209. if $ARGS[1] = 'not_enrolled':
  210. RESULT = func('uniutil', 'student', 'enrolled') = 0
  211. end
  212. if $ARGS[1] = 'semesters_to_graduate':
  213. RESULT = 2
  214. end
  215. end
  216. if $ARGS[0] = 'diploma':
  217. if $ARGS[1] = 'get':
  218. RESULT = diplom
  219. end
  220. if $ARGS[1] = 'set':
  221. diplom = ARGS[2]
  222. end
  223. if $ARGS[1] = 'set_obtained':
  224. gs 'uniutil', 'diploma', 'set', 1
  225. if func('uniutil', 'fake_diploma', 'aware_needed'):
  226. gs 'uniutil', 'fake_diploma', 'reset'
  227. end
  228. end
  229. if $ARGS[1] = 'obtained':
  230. RESULT = func('uniutil', 'diploma', 'get') > 0
  231. end
  232. end
  233. if $ARGS[0] = 'fake_diploma':
  234. if $ARGS[1] = 'get':
  235. RESULT = fakediplom
  236. end
  237. if $ARGS[1] = 'set':
  238. fakediplom = ARGS[2]
  239. end
  240. if $ARGS[1] = 'set_aware_needed':
  241. gs 'uniutil', 'fake_diploma', 'set', 2
  242. end
  243. if $ARGS[1] = 'set_obtained':
  244. gs 'uniutil', 'fake_diploma', 'set', 1
  245. end
  246. if $ARGS[1] = 'reset':
  247. gs 'uniutil', 'fake_diploma', 'set', 0
  248. end
  249. if $ARGS[1] = 'aware_needed':
  250. RESULT = func('uniutil', 'fake_diploma', 'get') = 2
  251. end
  252. if $ARGS[1] = 'obtained':
  253. RESULT = func('uniutil', 'fake_diploma', 'get') = 1
  254. end
  255. end
  256. if $ARGS[0] = 'appear_to_have_graduated':
  257. RESULT = func('uniutil', 'diploma', 'obtained') or func('uniutil', 'fake_diploma', 'obtained')
  258. end
  259. if $ARGS[0] = 'attendance':
  260. if $ARGS[1] = 'get':
  261. RESULT = unisemestrstats['lectures_attendad']
  262. end
  263. if $ARGS[1] = 'set':
  264. unisemestrstats['lectures_attendad'] = ARGS[2]
  265. end
  266. if $ARGS[1] = 'update':
  267. gs 'uniutil', 'attendance', 'set', func('uniutil', 'attendance', 'get') + 1
  268. end
  269. if $ARGS[1] = 'reset':
  270. gs 'uniutil', 'attendance', 'set', 0
  271. end
  272. if $ARGS[1] = 'is_great':
  273. RESULT = func('uniutil', 'attendance', 'get') > 55
  274. end
  275. if $ARGS[1] = 'is_ok':
  276. RESULT = func('uniutil', 'attendance', 'get') > 40
  277. end
  278. if $ARGS[1] = 'is_bad':
  279. RESULT = func('uniutil', 'attendance', 'is_ok') = 0
  280. end
  281. end
  282. if $ARGS[0] = 'assignment_progress':
  283. if $ARGS[1] = 'get':
  284. RESULT = unisemestrstats['assignment_progress']
  285. end
  286. if $ARGS[1] = 'set':
  287. unisemestrstats['assignment_progress'] = iif(ARGS[2] <= 100, ARGS[2], 100)
  288. end
  289. if $ARGS[1] = 'update':
  290. gs 'uniutil', 'assignment_progress', 'set', func('uniutil', 'assignment_progress', 'get') + rand(pcs_intel / 20, pcs_intel / 10)
  291. end
  292. if $ARGS[1] = 'reset':
  293. gs 'uniutil', 'assignment_progress', 'set', 0
  294. end
  295. if $ARGS[1] = 'is_finished':
  296. RESULT = func('uniutil', 'assignment_progress', 'get') >= 100
  297. end
  298. if $ARGS[1] = 'is_not_finished':
  299. RESULT = func('uniutil', 'assignment_progress', 'is_finished') = 0
  300. end
  301. end
  302. if $ARGS[0] = 'assignments_done':
  303. if $ARGS[1] = 'get':
  304. RESULT = unisemestrstats['assignments_done']
  305. end
  306. if $ARGS[1] = 'set':
  307. unisemestrstats['assignments_done'] = ARGS[2]
  308. end
  309. if $ARGS[1] = 'update':
  310. gs 'uniutil', 'assignment_progress', 'reset'
  311. gs 'uniutil', 'assignments_done', 'set', func('uniutil', 'assignments_done', 'get') + 1
  312. end
  313. if $ARGS[1] = 'reset':
  314. gs 'uniutil', 'assignments_done', 'set', 0
  315. end
  316. if $ARGS[1] = 'great_num':
  317. RESULT = 11
  318. end
  319. if $ARGS[1] = 'min_num':
  320. RESULT = 1
  321. end
  322. if $ARGS[1] = 'did_great_num':
  323. RESULT = func('uniutil', 'assignments_done', 'get') >= func('uniutil', 'assignments_done', 'great_num')
  324. end
  325. if $ARGS[1] = 'did_min_num':
  326. RESULT = func('uniutil', 'assignments_done', 'get') >= func('uniutil', 'assignments_done', 'min_num')
  327. end
  328. end
  329. if $ARGS[0] = 'scholarship':
  330. if $ARGS[1] = 'get':
  331. RESULT = unisemestrstats['scholarship']
  332. end
  333. if $ARGS[1] = 'set':
  334. unisemestrstats['scholarship'] = ARGS[2]
  335. end
  336. if $ARGS[1] = 'reset':
  337. gs 'uniutil', 'scholarship', 'set', 0
  338. end
  339. if $ARGS[1] = 'is_active':
  340. RESULT = unisemestrstats['scholarship'] > 0 and func('uniutil', 'semester', 'is_active')
  341. end
  342. if $ARGS[1] = 'honors_value':
  343. RESULT = 1200
  344. end
  345. end
  346. if $ARGS[0] = 'lecture':
  347. if $ARGS[1] = 'start_hour':
  348. RESULT = 8
  349. end
  350. if $ARGS[1] = 'length':
  351. RESULT = 6
  352. end
  353. if $ARGS[1] = 'start_month':
  354. if ARGS[2] = 1:
  355. RESULT = 9
  356. elseif ARGS[2] = 2:
  357. RESULT = 2
  358. else
  359. !! Set to impossible month if it is not semester 1 or 2
  360. RESULT = 13
  361. end
  362. end
  363. if $ARGS[1] = 'end_month':
  364. if ARGS[2] = 1:
  365. RESULT = 11
  366. elseif ARGS[2] = 2:
  367. RESULT = 4
  368. else
  369. !! Set to impossible month if it is not semester 1 or 2
  370. RESULT = 0
  371. end
  372. end
  373. if $ARGS[1] = 'offered_this_month':
  374. unilect_sm = func('uniutil', 'lecture', 'start_month', func('uniutil', 'semester', 'get'))
  375. unilect_em = func('uniutil', 'lecture', 'end_month', func('uniutil', 'semester', 'get'))
  376. if unilect_sm <= unilect_em:
  377. !! if semester is in one calendar year
  378. RESULT = month >= unilect_sm and month <= unilect_em
  379. else
  380. !! if semester continues through New Years
  381. RESULT = month >= unilect_sm or month <= unilect_em
  382. end
  383. killvar 'unilect_sm'
  384. killvar 'unilect_em'
  385. end
  386. if $ARGS[1] = 'offered_today':
  387. RESULT = func('uniutil', 'lecture', 'offered_this_month') and week < 6
  388. end
  389. if $ARGS[1] = 'in_session':
  390. RESULT = func('uniutil', 'lecture', 'offered_today') and hour < func('uniutil', 'lecture', 'start_hour')
  391. end
  392. if $ARGS[1] = 'print_start_month':
  393. $RESULT = $monthName[func('uniutil', 'lecture', 'start_month', ARGS[2])]
  394. end
  395. if $ARGS[1] = 'print_months':
  396. unilect_idx = func('uniutil', 'lecture', 'start_month', ARGS[2])
  397. unilect_end = func('uniutil', 'lecture', 'end_month', ARGS[2])
  398. :lectureprintmonthsloop
  399. $RESULT += $monthname[unilect_idx]
  400. if unilect_idx ! unilect_end:
  401. $RESULT += ', '
  402. unilect_idx = (unilect_idx mod 12) + 1
  403. jump 'lectureprintmonthsloop'
  404. end
  405. killvar 'unilect_idx'
  406. killvar 'unilect_end'
  407. end
  408. end
  409. if $ARGS[0] = 'exam':
  410. if $ARGS[1] = 'month':
  411. if ARGS[2] = 1:
  412. RESULT = 12
  413. elseif ARGS[2] = 2:
  414. RESULT = 5
  415. else
  416. !! Set to impossible month if it is not semester 1 or 2
  417. RESULT = 0
  418. end
  419. end
  420. if $ARGS[1] = 'offered_this_month':
  421. RESULT = month = func('uniutil', 'exam', 'month', func('uniutil', 'semester', 'get'))
  422. end
  423. if $ARGS[1] = 'offered_today':
  424. RESULT = func('uniutil', 'exam', 'offered_this_month') and week < 6
  425. end
  426. if $ARGS[1] = 'print_month':
  427. $RESULT = $monthname[func('uniutil', 'exam', 'month', ARGS[2])]
  428. end
  429. end
  430. if $ARGS[0] = 'semester':
  431. if $ARGS[1] = 'get':
  432. RESULT = unisemestrstats['num']
  433. end
  434. if $ARGS[1] = 'set':
  435. unisemestrstats['num'] = ARGS[2]
  436. end
  437. if $ARGS[1] = 'next':
  438. RESULT = (func('uniutil', 'semester', 'get') mod func('uniutil', 'semester', 'total')) + 1
  439. end
  440. if $ARGS[1] = 'total':
  441. RESULT = 2
  442. end
  443. if $ARGS[1] = 'update':
  444. gs 'uniutil', 'semester', 'set', func('uniutil', 'semester', 'next')
  445. end
  446. if $ARGS[1] = 'get_year':
  447. RESULT = unisemestrstats['year']
  448. end
  449. if $ARGS[1] = 'update_year':
  450. unisemestrstats['year'] = year
  451. end
  452. if $ARGS[1] = 'is_active':
  453. RESULT = func('uniutil', 'lecture', 'offered_this_month') or func('uniutil', 'exam', 'offered_this_month')
  454. end
  455. if $ARGS[1] = 'print_months':
  456. $RESULT = 'Semester ' + ARGS[2] + ' lectures: ' + func('uniutil', 'lecture', 'print_months', ARGS[2]) + '.
  457. '
  458. $RESULT += 'Semester ' + ARGS[2] + ' exams: ' + func('uniutil', 'exam', 'print_month', ARGS[2]) + '.
  459. '
  460. end
  461. if $ARGS[1] = 'print_all_months':
  462. unisemester_idx = 1
  463. :semesterprintmonthsloop
  464. $RESULT += func('uniutil', 'semester', 'print_months', unisemester_idx)
  465. if unisemester_idx < func('uniutil', 'semester', 'total'):
  466. unisemester_idx += 1
  467. jump 'semesterprintmonthsloop'
  468. end
  469. killvar 'unisemester_idx'
  470. end
  471. end
  472. if $ARGS[0] = 'semester_result':
  473. if $ARGS[1] = 'get':
  474. RESULT = unisemestrstats['is_passed']
  475. end
  476. if $ARGS[1] = 'set':
  477. unisemestrstats['is_passed'] = ARGS[2]
  478. end
  479. if $ARGS[1] = 'set_passed':
  480. gs 'uniutil', 'semester_result', 'set', 1
  481. end
  482. if $ARGS[1] = 'set_failed':
  483. gs 'uniutil', 'semester_result', 'set', -1
  484. end
  485. if $ARGS[1] = 'reset':
  486. gs 'uniutil', 'semester_result', 'set', 0
  487. end
  488. if $ARGS[1] = 'is_passed':
  489. RESULT = func('uniutil', 'semester_result', 'get') > 0
  490. end
  491. if $ARGS[1] = 'is_failed':
  492. RESULT = func('uniutil', 'semester_result', 'get') < 0
  493. end
  494. end
  495. if $ARGS[0] = 'exam_outcome':
  496. gs 'uniutil', 'assignment_progress', 'reset'
  497. gs 'uniutil', 'assignments_done', 'reset'
  498. gs 'uniutil', 'attendance', 'reset'
  499. if $ARGS[1] = 'passed_honors':
  500. gs 'uniutil', 'semester_result', 'set_passed'
  501. gs 'uniutil', 'scholarship', 'set', func('uniutil', 'scholarship', 'honors_value')
  502. elseif $ARGS[1] = 'passed':
  503. gs 'uniutil', 'semester_result', 'set_passed'
  504. gs 'uniutil', 'scholarship', 'reset'
  505. else
  506. gs 'uniutil', 'semester_result', 'set_failed'
  507. gs 'uniutil', 'scholarship', 'reset'
  508. end
  509. end
  510. if $ARGS[0] = 'passed_semesters':
  511. if $ARGS[1] = 'get':
  512. RESULT = unisemestrstats['prev_passed_count'] + iif(func('uniutil', 'semester_result', 'is_passed'), 1, 0)
  513. end
  514. if $ARGS[1] = 'set':
  515. unisemestrstats['prev_passed_count'] = ARGS[2]
  516. end
  517. if $ARGS[1] = 'update':
  518. gs 'uniutil', 'passed_semesters', 'set', func('uniutil', 'passed_semesters', 'get')
  519. end
  520. end
  521. --- uniutil ---------------------------------