Guest User

TW crash 04 11 23

a guest
Nov 4th, 2023
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.03 KB | None | 0 0
  1. @ADD_BANQUET_CHECK
  2. SIF !FLAG:宴会の有無
  3. RETURN
  4. SIF ADD_BANQUETS_LAST_DAY_CHECKED == DAY
  5. RETURN
  6.  
  7. FLAG:宴会開催フラグ = 0
  8. FLAG:宴会規模 = 0
  9. FOR LOCAL, 0, ADD_BANQUETS_MAX
  10. SIF !ADD_BANQUETS_UPCOMING:LOCAL
  11. CONTINUE
  12. CALL ADD_BANQUET_STATUS_CHECK(LOCAL)
  13.  
  14. SELECTCASE ADD_BANQUETS_STATUS:LOCAL
  15. CASE ADD_BANQUET_STATE_FINISHED, ADD_BANQUET_STATE_CANCELLED
  16. CALL ADD_BANQUET_END(LOCAL)
  17. ENDSELECT
  18. NEXT
  19.  
  20. FOR LOCAL, 1, OBJ_ID_LAST
  21. IF GET_INT(0, "ADD_BANQUET", LOCAL, "CONDITIONS") && ADD_BANQUET_INDEX(LOCAL) < 0 ;no doubling up of banquets
  22. CALLFORM ADD_BANQUET_PLANNING{LOCAL}
  23. ENDIF
  24. NEXT
  25.  
  26. ;cleanup of character values, just in case
  27. FOR LOCAL, 1, CHARANUM
  28. IF !CFLAG:LOCAL:BANQUET || (CFLAG:LOCAL:BANQUET && !ADD_BANQUET_ACTIVE(CFLAG:LOCAL:BANQUET))
  29. CFLAG:LOCAL:BANQUET = 0
  30. CFLAG:LOCAL:BANQUET_ROLE = 0
  31. CFLAG:LOCAL:宴会参加 = 0
  32. ENDIF
  33. NEXT
  34.  
  35. ADD_BANQUETS_LAST_DAY_CHECKED = DAY
  36.  
  37. @ADD_BANQUET_SET_PARTICIPANTS
  38. #DIM DAY_TO_CHECK
  39.  
  40. FOR LOCAL, 0, ADD_BANQUETS_MAX
  41. SIF !ADD_BANQUETS_UPCOMING:LOCAL
  42. CONTINUE
  43. SIF ADD_BANQUETS_STATUS:LOCAL != ADD_BANQUET_STATE_PLANNED
  44. CONTINUE
  45.  
  46. DAY_TO_CHECK = ADD_BANQUETS_START_DAY:LOCAL
  47. SIF ADD_BANQUETS_START_TIME:LOCAL - (ADD_BANQUETS_SCALE:LOCAL / 30) - 15 < 0
  48. DAY_TO_CHECK --
  49.  
  50. IF DAY_TO_CHECK <= DAY
  51. DEBUGPRINTFORML Setting participants for banquet %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "NAME")%:
  52. WAIT
  53. CALLFORM ADD_BANQUET_SET_PARTICIPANTS{ADD_BANQUETS_UPCOMING:LOCAL}
  54. ENDIF
  55. NEXT
  56.  
  57. @ADD_BANQUET_CREATE(BANQUET_ID, LOCATION, START_TIME, START_DAY, DURATION, SCALE)
  58. #DIM BANQUET_ID
  59. #DIM LOCATION
  60. #DIM START_TIME
  61. #DIM START_DAY
  62. #DIM DURATION
  63. #DIM SCALE
  64. #DIM INDEX
  65.  
  66. INDEX = -1
  67. FOR LOCAL, 0, ADD_BANQUETS_MAX
  68. IF ADD_BANQUETS_UPCOMING:LOCAL == 0
  69. INDEX = LOCAL
  70. BREAK
  71. ENDIF
  72. NEXT
  73.  
  74. IF INDEX < 0 ;no slots open
  75. DEBUGPRINTFORML Cannot create banquet {BANQUET_ID}. No open slots available.
  76. RETURN -1
  77. ENDIF
  78.  
  79. ADD_BANQUETS_UPCOMING:INDEX = BANQUET_ID
  80. ADD_BANQUETS_LOCATION:INDEX = LOCATION
  81. ADD_BANQUETS_START_TIME:INDEX = START_TIME
  82. ADD_BANQUETS_START_DAY:INDEX = START_DAY
  83. ADD_BANQUETS_STATUS:INDEX = 1
  84. ADD_BANQUETS_DURATION:INDEX = DURATION
  85. ADD_BANQUETS_SCALE:INDEX = SCALE
  86.  
  87. RETURN INDEX
  88.  
  89. @ADD_BANQUET_PROGRESS
  90. #DIM BANQUET_ID
  91. FOR LOCAL, 0, ADD_BANQUETS_MAX
  92. IF ADD_BANQUETS_UPCOMING:LOCAL > 0
  93. CALL ADD_BANQUET_STATUS_CHECK(LOCAL)
  94. ENDIF
  95. NEXT
  96.  
  97. @ADD_BANQUET_END(BANQUET_INDEX)
  98. #DIM BANQUET_INDEX
  99. #DIM BANQUET_ID
  100. BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  101. SIF !BANQUET_ID
  102. RETURN
  103.  
  104. FOR LOCAL, 1, CHARANUM
  105. IF CFLAG:LOCAL:BANQUET == BANQUET_ID
  106. CFLAG:LOCAL:BANQUET = 0
  107. CFLAG:LOCAL:BANQUET_ROLE = 0
  108. ENDIF
  109. NEXT
  110.  
  111. IF BANQUET_INDEX >= 0
  112. ARRAYREMOVE ADD_BANQUETS_UPCOMING, BANQUET_INDEX, 1
  113. ARRAYREMOVE ADD_BANQUETS_LOCATION, BANQUET_INDEX, 1
  114. ARRAYREMOVE ADD_BANQUETS_STATUS, BANQUET_INDEX, 1
  115. ARRAYREMOVE ADD_BANQUETS_START_TIME, BANQUET_INDEX, 1
  116. ARRAYREMOVE ADD_BANQUETS_START_DAY, BANQUET_INDEX, 1
  117. ARRAYREMOVE ADD_BANQUETS_SCALE, BANQUET_INDEX, 1
  118. ARRAYREMOVE ADD_BANQUETS_DURATION, BANQUET_INDEX, 1
  119. ARRAYREMOVE ADD_BANQUETS_VISITED, BANQUET_INDEX, 1
  120. ARRAYREMOVE ADD_BANQUETS_INVITED, BANQUET_INDEX, 1
  121. ENDIF
  122.  
  123. @ADD_BANQUET_ACTIVE(BANQUET_ID)
  124. #FUNCTION
  125. #DIM BANQUET_ID
  126. RETURNF ADD_BANQUET_INDEX(BANQUET_ID) >= 0
  127.  
  128. @ADD_BANQUET_INDEX(BANQUET_ID)
  129. #FUNCTION
  130. #DIM BANQUET_ID
  131. RETURNF FINDELEMENT(ADD_BANQUETS_UPCOMING, BANQUET_ID)
  132.  
  133. @ADD_BANQUET_STATUS_CHECK(BANQUET_INDEX)
  134. #DIM BANQUET_INDEX
  135. #DIM LOCATION
  136. #DIM BANQUET_ID
  137. #DIM PREVIOUS_STATE
  138. LOCATION = GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
  139. BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  140. PREVIOUS_STATE = ADD_BANQUETS_STATUS:BANQUET_INDEX
  141.  
  142. IF PREVIOUS_STATE < ADD_BANQUET_STATE_FINISHED && ADD_BANQUET_TIME_CHECK(ADD_BANQUETS_START_DAY:BANQUET_INDEX, ADD_BANQUETS_START_TIME:BANQUET_INDEX+ADD_BANQUETS_DURATION:BANQUET_INDEX) ;end
  143. ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_FINISHED
  144.  
  145. CALLFORM ADD_BANQUET_FINISH{BANQUET_ID}
  146. FOR LOCAL, 1, CHARANUM
  147. SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
  148. CONTINUE
  149. SIF !CFLAG:LOCAL:BANQUET_ROLE
  150. CONTINUE
  151.  
  152. IF CFLAG:LOCAL:BANQUET_ROLE > 1
  153. ;主催者は片付け予定をセット(仕事量は最大1200)
  154. CFLAG:LOCAL:片付け仕事量 = MIN(ADD_BANQUETS_SCALE:BANQUET_INDEX / 6, 1200)
  155. CFLAG:LOCAL:片付け場所 = ADD_BANQUETS_LOCATION:BANQUET_INDEX
  156. CFLAG:LOCAL:BANQUET_CLEANUP = CFLAG:LOCAL:BANQUET
  157. ENDIF
  158. ;reset values
  159. CALL ADD_BANQUET_END_PARTICIPATION(LOCAL)
  160. NEXT
  161. SIF ADD_BANQUETS_INVITED:BANQUET_INDEX
  162. PRINTFORML %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")% has ended.
  163. ELSEIF PREVIOUS_STATE < ADD_BANQUET_STATE_IN_PROGRESS && ADD_BANQUET_TIME_CHECK(ADD_BANQUETS_START_DAY:BANQUET_INDEX, ADD_BANQUETS_START_TIME:BANQUET_INDEX) ;start
  164. DEBUGPRINTFORML Setting banquet {BANQUET_ID} to in-progress state
  165. ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_IN_PROGRESS
  166. ;set workloads
  167. FOR LOCAL, 1, CHARANUM
  168. SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
  169. CONTINUE
  170. SIF !CFLAG:LOCAL:BANQUET_ROLE
  171. CONTINUE
  172.  
  173. SIF CFLAG:LOCAL:睡眠 && GET_INT(0, "ADD_BANQUET", BANQUET_ID, "KEEP_AWAKE")
  174. CALL CHARA_AWAKE, LOCAL
  175.  
  176. CALLFORM ADD_BANQUET_WORKLOAD_PARTICIPATION{BANQUET_ID}(LOCAL, ADD_BANQUETS_SCALE:BANQUET_INDEX)
  177. CFLAG:LOCAL:職場 = LOCATION
  178. NEXT
  179. ELSEIF PREVIOUS_STATE < ADD_BANQUET_STATE_PREPARING && ADD_BANQUET_TIME_CHECK(ADD_BANQUETS_START_DAY:BANQUET_INDEX, ADD_BANQUETS_START_TIME:BANQUET_INDEX - MAX((ADD_BANQUETS_SCALE:BANQUET_INDEX / 30) - 15, 120)) ;prepare
  180. IF ADD_BANQUET_TIME_CHECK(ADD_BANQUETS_START_DAY:BANQUET_INDEX, ADD_BANQUETS_START_TIME:BANQUET_INDEX - (ADD_BANQUETS_SCALE:BANQUET_INDEX / 30) - 15)
  181. DEBUGPRINTFORML Setting banquet {BANQUET_INDEX} to preparation state
  182. ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_PREPARING
  183. ;set workloads
  184. FOR LOCAL, 1, CHARANUM
  185. SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
  186. CONTINUE
  187. SIF CFLAG:LOCAL:BANQUET_ROLE <= 1
  188. CONTINUE
  189.  
  190. SIF CFLAG:LOCAL:睡眠 && GET_INT(0, "ADD_BANQUET", BANQUET_ID, "KEEP_AWAKE")
  191. CALL CHARA_AWAKE, LOCAL
  192.  
  193. CALLFORM ADD_BANQUET_WORKLOAD_PREPARATION{BANQUET_ID}(LOCAL)
  194. CFLAG:LOCAL:職場 = LOCATION
  195. NEXT
  196. ENDIF
  197. ENDIF
  198.  
  199. SELECTCASE PREVIOUS_STATE
  200. CASE ADD_BANQUET_STATE_PLANNED
  201. CASE ADD_BANQUET_STATE_PREPARING
  202. SIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_PREPARING
  203. CALLFORM ADD_BANQUET_PROGRESS{BANQUET_ID}(BANQUET_INDEX)
  204. CASE ADD_BANQUET_STATE_IN_PROGRESS
  205. SIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
  206. CALLFORM ADD_BANQUET_PROGRESS{BANQUET_ID}(BANQUET_INDEX)
  207. CASE ADD_BANQUET_STATE_FINISHED
  208. CASE ADD_BANQUET_STATE_CANCELLED
  209. ENDSELECT
  210.  
  211. CALL ADD_BANQUET_WEATHER_CHECK(BANQUET_INDEX)
  212. ;check participants and move them if needed
  213. FOR LOCAL, 1, CHARANUM
  214. SIF CFLAG:LOCAL:BANQUET != ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  215. CONTINUE
  216. SIF CFLAG:LOCAL:現在位置 == LOCATION
  217. CONTINUE
  218. SIF CFLAG:LOCAL:睡眠
  219. CONTINUE
  220. SIF CFLAG:LOCAL:職種 == 酔いつぶれる
  221. CONTINUE
  222. IF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_PREPARING
  223. IF CFLAG:LOCAL:BANQUET_ROLE > 1
  224. CALLFORM ADD_BANQUET_PREPARATION_TEXT{BANQUET_ID}(LOCAL, LOCATION)
  225. CFLAG:LOCAL:現在位置 = LOCATION
  226. SIF CFLAG:LOCAL:うふふ
  227. CALL ENDUFUFU(LOCAL)
  228. ENDIF
  229. ELSEIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
  230. IF CFLAG:LOCAL:BANQUET_ROLE && !睡眠時間(LOCAL)
  231. CALLFORM ADD_BANQUET_JOIN_TEXT{BANQUET_ID}(LOCAL, LOCATION)
  232. CFLAG:LOCAL:現在位置 = LOCATION
  233. SIF CFLAG:LOCAL:うふふ
  234. CALL ENDUFUFU(LOCAL)
  235. ENDIF
  236. ENDIF
  237. NEXT
  238.  
  239. ;start only after everyone has been moved
  240. SIF PREVIOUS_STATE != ADD_BANQUET_STATE_IN_PROGRESS && ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
  241. CALLFORM ADD_BANQUET_START{BANQUET_ID}
  242. IF !ADD_BANQUETS_VISITED:BANQUET_INDEX && ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS && CFLAG:MASTER:現在位置 == LOCATION
  243. CALLFORM ADD_BANQUET_VISIT{BANQUET_ID}(PREVIOUS_STATE)
  244. ADD_BANQUETS_VISITED:BANQUET_INDEX = 1
  245. ENDIF
  246.  
  247. IF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
  248. IF CFLAG:MASTER:現在位置 == LOCATION
  249. FLAG:宴会開催フラグ = BANQUET_ID
  250. FLAG:参加人数 = ADD_BANQUET_PARTICIPANT_COUNT(BANQUET_INDEX)
  251. FLAG:宴会規模 = ADD_BANQUETS_SCALE:BANQUET_INDEX
  252. ENDIF
  253. ENDIF
  254.  
  255. @ADD_BANQUET_TIME_CHECK(DAY_TO_CHECK, TIME_TO_CHECK)
  256. #FUNCTION
  257. #DIM DAY_TO_CHECK
  258. #DIM TIME_TO_CHECK
  259.  
  260. IF TIME_TO_CHECK < 0
  261. DAY_TO_CHECK--
  262. TIME_TO_CHECK = 1440 - TIME_TO_CHECK
  263. ELSEIF TIME_TO_CHECK >= 1440
  264. DAY_TO_CHECK++
  265. TIME_TO_CHECK = TIME_TO_CHECK - 1440
  266. ENDIF
  267. SIF DAY > DAY_TO_CHECK
  268. RETURNF 1
  269. SIF DAY >= DAY_TO_CHECK && TIME >= TIME_TO_CHECK
  270. RETURNF 1
  271. RETURNF 0
  272.  
  273. @ADD_BANQUET_PREVENT_MOVEMENT(CHARA)
  274. #FUNCTION
  275. #DIM CHARA
  276.  
  277. SIF CFLAG:CHARA:職種 == 酔いつぶれる
  278. RETURNF 0
  279.  
  280. RETURNF ADD_BANQUET_CHARA_STATE(CHARA)
  281.  
  282. @ADD_BANQUET_PRINT_OVERVIEW
  283. #DIM DYNAMIC UPCOMING_PRINTED
  284. SIF FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_INVITED) < 0 && FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_STAFF) < 0
  285. RETURN
  286. LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
  287. IF LOCAL:1 == 0
  288. RETURN
  289. ELSEIF LOCAL:1 == -1
  290. LOCAL:1 = ADD_BANQUETS_MAX
  291. ENDIF
  292. FOR LOCAL, 0, LOCAL:1
  293. SIF ADD_BANQUETS_STATUS:LOCAL >= ADD_BANQUET_STATE_FINISHED
  294. CONTINUE
  295. SIF ADD_BANQUETS_INVITED:LOCAL <= 0
  296. CONTINUE
  297. IF UPCOMING_PRINTED
  298. PRINTFORML Upcoming events:
  299. UPCOMING_PRINTED = 1
  300. ENDIF
  301. PRINTFORML %ADD_BANQUET_TIME_AND_PLACE_SHORT_DESCRIPTION(LOCAL)%
  302. PRINTFORM %CAPITALIZE(ADD_BANQUET_TERM(ADD_BANQUETS_UPCOMING:LOCAL))% Size:
  303. SELECTCASE ADD_BANQUETS_SCALE:LOCAL
  304. CASE IS >= 5000
  305. PRINT Grand
  306. CASE IS >= 2500
  307. PRINT Big
  308. CASE IS >= 1500
  309. PRINT Medium
  310. CASEELSE
  311. PRINT Small
  312. ENDSELECT
  313.  
  314. IF GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "WEATHER_DEPENDENT")
  315. IF !GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "ALTERNATIVE_INDOOR_LOCATION")
  316. PRINTL  Can Get Canceled Due To Rain
  317. ELSE
  318. PRINTL  Can Get Moved Due To Rain
  319. ENDIF
  320. ELSE
  321. PRINTL
  322. ENDIF
  323. PRINTL
  324. NEXT
  325.  
  326. @ADD_BANQUET_PRINT_TODAYS_EVENTS
  327. SIF FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_INVITED) < 0 && FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_STAFF) < 0
  328. RETURN
  329. LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
  330. IF LOCAL:1 == 0
  331. RETURN
  332. ELSEIF LOCAL:1 == -1
  333. LOCAL:1 = ADD_BANQUETS_MAX
  334. ENDIF
  335. FOR LOCAL, 0, LOCAL:1
  336. SIF ADD_BANQUETS_INVITED:LOCAL <= 0
  337. CONTINUE
  338. SIF ADD_BANQUETS_START_DAY:LOCAL == DAY
  339. PRINTFORML %ADD_BANQUET_TIME_AND_PLACE_DESCRIPTION(LOCAL)%
  340. NEXT
  341.  
  342. @ADD_BANQUET_FILL_PARTICIPANTS(BANQUET_INDEX, ResidentRate, VisitorRate)
  343. #DIM BANQUET_INDEX
  344. #DIM BANQUET_ID
  345. #DIM ResidentRate
  346. #DIM VisitorRate
  347. #DIMS DYNAMIC HOST_LIST, キャラクタ数上限
  348. #DIMS DYNAMIC GUEST_LIST, キャラクタ数上限
  349. #DIMS DYNAMIC BANNED_LIST, キャラクタ数上限
  350.  
  351. BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  352. SIF !BANQUET_ID
  353. RETURN
  354. SPLIT GET_STR(0, "ADD_BANQUET", BANQUET_ID, "HOST_LIST"), "/", HOST_LIST
  355. SPLIT GET_STR(0, "ADD_BANQUET", BANQUET_ID, "GUEST_LIST"), "/", GUEST_LIST
  356. SPLIT GET_STR(0, "ADD_BANQUET", BANQUET_ID, "BANNED_LIST"), "/", BANNED_LIST
  357. FOR LOCAL, 1, CHARANUM
  358. SIF CFLAG:LOCAL:出禁
  359. CONTINUE
  360. IF FINDELEMENT(HOST_LIST, TOSTR(LOCAL),,,1) >= 0
  361. CFLAG:LOCAL:BANQUET = BANQUET_ID
  362. CFLAG:LOCAL:BANQUET_ROLE = 2
  363. CFLAG:LOCAL:宴会参加 = 2
  364. TCVAR:LOCAL:仕事開始 = -1 ;block regular work
  365. TCVAR:LOCAL:仕事終了 = -1 ;block regular work
  366. ELSEIF FINDELEMENT(GUEST_LIST, TOSTR(LOCAL),,,1) >= 0
  367. CFLAG:LOCAL:BANQUET = BANQUET_ID
  368. CFLAG:LOCAL:BANQUET_ROLE = 1
  369. CFLAG:LOCAL:宴会参加 = 1
  370. TCVAR:LOCAL:仕事開始 = -1 ;block regular work
  371. TCVAR:LOCAL:仕事終了 = -1 ;block regular work
  372. ELSEIF FINDELEMENT(BANNED_LIST, TOSTR(LOCAL),,,1) < 0 ;not banned
  373. SIF CFLAG:LOCAL:BANQUET ;already spoken for
  374. CONTINUE
  375.  
  376. TRYCCALLFORM ADD_BANQUET_PARTICIPANT_JOIN_CHECK{BANQUET_ID}(LOCAL)
  377. CATCH
  378. CALL ADD_BANQUET_PARTICIPANT_DEFAULT_CHECK(LOCAL, ADD_BANQUETS_LOCATION:BANQUET_INDEX, ResidentRate, VisitorRate)
  379. ENDCATCH
  380.  
  381. IF RESULT
  382. CFLAG:LOCAL:BANQUET = BANQUET_ID
  383. CFLAG:LOCAL:BANQUET_ROLE = 1
  384. CFLAG:LOCAL:宴会参加 = 1
  385. TCVAR:LOCAL:仕事開始 = -1 ;block regular work
  386. TCVAR:LOCAL:仕事終了 = -1 ;block regular work
  387. ENDIF
  388. ENDIF
  389. NEXT
  390.  
  391. [IF_DEBUG]
  392. PRINTFORML %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% guests:
  393. FOR LOCAL, 1, CHARANUM
  394. SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
  395. CONTINUE
  396. PRINTFORML %CALLNAME:LOCAL%: \@ CFLAG:LOCAL:BANQUET_ROLE == 2 ? Host # Guest \@
  397. NEXT
  398. [ENDIF]
  399.  
  400. FLAG:宴会開催フラグ = BANQUET_ID ;mostly for old dialogue
  401. FLAG:宴会規模 = ADD_BANQUETS_SCALE:BANQUET_INDEX
  402.  
  403. @ADD_BANQUET_PARTICIPANT_DEFAULT_CHECK(ARG, LOCATION, ResidentRate, VisitorRate)
  404. #DIM ResidentRate
  405. #DIM VisitorRate
  406. #DIM VenueMap
  407. #DIM LOCATION
  408. VenueMap = GET_MAPID(LOCATION)
  409. IF GET_MAPID(CFLAG:ARG:自宅位置) == VenueMap
  410. IF RAND:100 < ResidentRate
  411. RETURN 1
  412. ENDIF
  413. ELSE
  414. IF RAND:100 < VisitorRate
  415. RETURN 1
  416. ENDIF
  417. ENDIF
  418. RETURN 0
  419.  
  420. @ADD_BANQUET_TIME_AND_PLACE_DESCRIPTION(BANQUET_INDEX)
  421. #FUNCTIONS
  422. #DIM BANQUET_INDEX
  423. #DIM DAYS_UNTIL
  424. #DIM START_TIME
  425. SIF ADD_BANQUETS_UPCOMING:BANQUET_INDEX < 0
  426. RETURNF @"ERROR: No valid banquet at slot {BANQUET_INDEX}"
  427. DAYS_UNTIL = ADD_BANQUETS_START_DAY:BANQUET_INDEX - DAY
  428. START_TIME = ADD_BANQUETS_START_TIME:BANQUET_INDEX
  429. LOCALS =
  430. SELECTCASE DAYS_UNTIL
  431. CASE 0
  432. LOCALS += "Today"
  433. CASE 1
  434. LOCALS += "Tomorrow"
  435. CASEELSE
  436. LOCALS += @"{DAYS_UNTIL} days from now"
  437. ENDSELECT
  438. LOCALS += @", %時刻表示(START_TIME)% at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%,「%GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")%」will be held."
  439. RETURNF LOCALS
  440.  
  441. @ADD_BANQUET_TIME_AND_PLACE_SHORT_DESCRIPTION(BANQUET_INDEX)
  442. #FUNCTIONS
  443. #DIM BANQUET_INDEX
  444. #DIM DAYS_UNTIL
  445. #DIM START_TIME
  446. SIF !ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  447. RETURNF @"ERROR: No valid banquet at slot {BANQUET_INDEX}"
  448. DAYS_UNTIL = ADD_BANQUETS_START_DAY:BANQUET_INDEX - DAY
  449. START_TIME = ADD_BANQUETS_START_TIME:BANQUET_INDEX
  450. LOCALS =
  451. SIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
  452. RETURNF @"Right now, at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%: %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")%"
  453.  
  454. SELECTCASE DAYS_UNTIL
  455. CASE 0
  456. LOCALS += "Today"
  457. CASE 1
  458. LOCALS += "Tomorrow"
  459. CASEELSE
  460. LOCALS += @"{DAYS_UNTIL} days from now"
  461. ENDSELECT
  462. LOCALS += @", %時刻表示(START_TIME)% at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%: %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")%"
  463. RETURNF LOCALS
  464.  
  465. @ADD_BANQUET_LOCATION(BANQUET_INDEX)
  466. #FUNCTIONS
  467. #DIM BANQUET_INDEX
  468. SIF !ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  469. RETURNF @"ERROR: No valid banquet at slot {BANQUET_INDEX}"
  470. LOCALS =
  471.  
  472. IF IN_HOME(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
  473. RETURNF NAME_FROM_PLACE(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
  474. ELSE
  475. RETURNF @"%GET_MAPNAME(ADD_BANQUETS_LOCATION:BANQUET_INDEX/100)% - %GET_PLACENAME(ADD_BANQUETS_LOCATION:BANQUET_INDEX)%"
  476. ENDIF
  477.  
  478. @ADD_BANQUET_TIME_UNTIL(BANQUET_INDEX)
  479. #FUNCTION
  480. #DIM BANQUET_INDEX
  481. SIF !ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  482. RETURNF 0
  483.  
  484. RETURNF (ADD_BANQUETS_START_DAY:BANQUET_INDEX - DAY) * 1440 + ADD_BANQUETS_START_TIME:BANQUET_INDEX - TIME
  485.  
  486. @ADD_BANQUET_WEATHER_CHECK(BANQUET_INDEX)
  487. #DIM BANQUET_INDEX
  488. #DIM BANQUET_ID
  489. #DIM PRESENT
  490. BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  491. PRESENT = CFLAG:MASTER:現在位置 == GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
  492. SIF !BANQUET_ID
  493. RETURN
  494. SIF !GROUPMATCH(ADD_BANQUETS_STATUS:BANQUET_INDEX, ADD_BANQUET_STATE_PREPARING, ADD_BANQUET_STATE_IN_PROGRESS)
  495. RETURN
  496. SIF !GET_INT(0, "ADD_BANQUET", BANQUET_ID, "WEATHER_DEPENDENT")
  497. RETURN
  498. SIF ADD_BANQUETS_LOCATION:BANQUET_INDEX == GET_INT(0, "ADD_BANQUET", BANQUET_ID, "ALTERNATIVE_INDOOR_LOCATION")
  499. RETURN
  500. SIF TIME:5 < 4
  501. RETURN
  502.  
  503. IF TIME:5 >= 4 && CFLAG:[[天子]]:BANQUET == BANQUET_ID
  504. PRINTFORMW It seemed that %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% was about to be cancelled due to bad weather, but then Tenshi's power cleared it up.
  505. TIME:5 = 0
  506. WIND_VELOCITY = 0
  507. FORBIDDEN_CHANGE_WEATHER = 1
  508. ELSEIF TIME:5 >= 4
  509. ;not possible during extreme weather
  510. IF ITEM:ウェザー・リポート && !FLAG:異常気象
  511. PRINTFORML You feel as if %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% is about to get cancelled due to weather.
  512. PRINTFORML Do you want to use %ITEMNAME_TR(GETNUM(ITEM, "ウェザー・リポート"))% to clear it up?
  513. CALL ASK_YN
  514. IF !RESULT
  515. PRINTFORMDL 『Weather Report』!
  516. PRINTFORMDW The weather immediately clears up, allowing %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% to continue as planned.
  517. TIME:5 = 0
  518. WIND_VELOCITY = 0
  519. FORBIDDEN_CHANGE_WEATHER = 1
  520. ITEM:ウェザー・リポート--
  521. RETURN
  522. ENDIF
  523. ENDIF
  524.  
  525. PRINTL
  526. IF GET_INT(0, "ADD_BANQUET", BANQUET_ID, "ALTERNATIVE_INDOOR_LOCATION")
  527. ADD_BANQUETS_LOCATION:BANQUET_INDEX = GET_INT(0, "ADD_BANQUET", BANQUET_ID, "ALTERNATIVE_INDOOR_LOCATION")
  528. PRINTFORMW Due to the weather, %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% has been relocated to %ADD_BANQUET_LOCATION(BANQUET_INDEX)%.
  529. IF PRESENT
  530. PRINTFORML Everyone quickly picks something up and prepares to move to the new venue.
  531. PRINTFORML Do you want to help them?
  532. CALL ASK_YN
  533. IF !RESULT
  534. CFLAG:MASTER:現在位置 = GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
  535. CFLAG:MASTER:デート中 = GET_MAPID(CFLAG:MASTER:現在位置)
  536. PRINTFORMW You grab some things and join the others at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%.
  537. ELSE
  538. PRINTFORMW You opt not to join the others and remain where you were.
  539. ENDIF
  540. CALL ADD_BANQUET_STATUS_CHECK(BANQUET_INDEX)
  541. ENDIF
  542. ELSE
  543. PRINTFORMW Unfortunately, %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% has been canceled due to bad weather.
  544.  
  545. ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_CANCELLED
  546. FOR LOCAL, 1, CHARANUM
  547. IF CFLAG:LOCAL:BANQUET == BANQUET_ID
  548. CALL ADD_BANQUET_END_PARTICIPATION(LOCAL)
  549. ENDIF
  550. NEXT
  551. ENDIF
  552. ENDIF
  553.  
  554. ;0=nothing, 1=attending, 2=preparing
  555. @ADD_BANQUET_CHARA_STATE(CHARA)
  556. #FUNCTION
  557. #DIM CHARA
  558. SIF !CFLAG:CHARA:BANQUET
  559. RETURNF 0
  560. SIF !ADD_BANQUET_ACTIVE(CFLAG:CHARA:BANQUET)
  561. RETURNF 0
  562. SELECTCASE ADD_BANQUETS_STATUS:ADD_BANQUET_INDEX(CFLAG:CHARA:BANQUET)
  563. CASE ADD_BANQUET_STATE_PREPARING
  564. RETURNF CFLAG:CHARA:BANQUET_ROLE > 1 ? 2 # 0
  565. CASE ADD_BANQUET_STATE_IN_PROGRESS
  566. RETURNF CFLAG:CHARA:BANQUET_ROLE ? 1 # 0
  567. ENDSELECT
  568. RETURNF 0
  569.  
  570. @ADD_BANQUET_TERM(BANQUET_ID)
  571. #FUNCTIONS
  572. #DIM BANQUET_ID
  573. RETURNF GET_STR(0, "ADD_BANQUET", BANQUET_ID, "TERM")
  574.  
  575. @ADD_ACTIVE_BANQUET_AT_LOCATION(LOCATION, INCLUDE_PREPARATION_PHASE = 0)
  576. #FUNCTION
  577. #DIM LOCATION
  578. #DIM INCLUDE_PREPARATION_PHASE
  579.  
  580. FOR LOCAL, 0, ADD_BANQUETS_MAX
  581. SIF !ADD_BANQUETS_UPCOMING:LOCAL
  582. CONTINUE
  583. SIF ADD_BANQUETS_STATUS:LOCAL != ADD_BANQUET_STATE_IN_PROGRESS && !(INCLUDE_PREPARATION_PHASE && ADD_BANQUETS_STATUS:LOCAL == ADD_BANQUET_STATE_PREPARING)
  584. CONTINUE
  585. SIF GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:LOCAL) == LOCATION
  586. RETURNF LOCAL
  587. NEXT
  588. RETURNF -1
  589.  
  590. @ADD_BANQUET_PARTICIPANT_COUNT(BANQUET_INDEX)
  591. #FUNCTION
  592. #DIM BANQUET_INDEX
  593. #DIM BANQUET_ID
  594. #DIM LOCATION
  595. #DIM DYNAMIC PARTICIPANT_COUNT
  596.  
  597. BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  598. SIF !BANQUET_ID
  599. RETURNF 0
  600. SIF ADD_BANQUETS_STATUS:BANQUET_INDEX != ADD_BANQUET_STATE_IN_PROGRESS
  601. RETURNF 0
  602. LOCATION = GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
  603.  
  604. FOR LOCAL, 1, CHARANUM
  605. SIF CFLAG:LOCAL:BANQUET == BANQUET_ID && CFLAG:LOCAL:現在位置 == LOCATION
  606. PARTICIPANT_COUNT++
  607. NEXT
  608. RETURNF PARTICIPANT_COUNT
  609.  
  610. @ADD_BANQUET_ACTIVITY_ALLOWED(ACTIVITY, ALLOW_UNINVITED = 0)
  611. #FUNCTION
  612. #DIMS ACTIVITY
  613. #DIM BANQUET_INDEX
  614. #DIM ALLOW_UNINVITED
  615. BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置)
  616. SIF BANQUET_INDEX < 0
  617. RETURNF 0
  618. SIF ALLOW_UNINVITED == 0 && ADD_BANQUETS_INVITED:BANQUET_INDEX <= 0
  619. RETURNF 0
  620.  
  621. RETURNF GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, ACTIVITY)
  622.  
  623. @ADD_BANQUET_MESSAGE_TALK
  624. #DIM BANQUET_INDEX
  625. BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置)
  626. SIF BANQUET_INDEX < 0
  627. RETURN
  628.  
  629. CALLFORM ADD_BANQUET_MESSAGE_TALK{ADD_BANQUETS_UPCOMING:BANQUET_INDEX}
  630.  
  631. @ADD_BANQUET_END_PARTICIPATION(ARG)
  632. BASE:ARG:仕事量 = 0
  633. CFLAG:ARG:職種 = 0
  634. CFLAG:ARG:職場 = 0
  635. CFLAG:ARG:行動 = 0
  636. TCVAR:ARG:手伝えない = 0
  637. CFLAG:ARG:BANQUET = 0
  638. CFLAG:ARG:BANQUET_ROLE = 0
  639. SIF 睡眠時間(ARG)
  640. CALL CHARA_SLEEP(ARG, 0)
  641.  
  642. @ADD_BANQUET_IS_PERFORMING(ARG)
  643. #FUNCTION
  644. #DIM BANQUET_INDEX
  645. #DIM BANQUET_ID
  646. BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:ARG:現在位置, 1)
  647. SIF BANQUET_INDEX < 0
  648. RETURNF 0
  649. BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
  650. SIF CFLAG:ARG:BANQUET != BANQUET_ID || CFLAG:ARG:BANQUET_ROLE < 2 ;not their own concert
  651. RETURNF 0
  652. SIF !GET_INT(0, "ADD_BANQUET", BANQUET_ID, "LISTEN_TO_MUSIC") ;not a concert
  653. RETURNF 0
  654. RETURNF 1
  655.  
  656. @ADD_BANQUET_HOSTING_UPCOMING(ARG)
  657. #FUNCTION
  658. #DIMS HOST_LIST, キャラクタ数上限
  659.  
  660. LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
  661. IF LOCAL:1 == 0
  662. RETURNF -1
  663. ELSEIF LOCAL:1 == -1
  664. LOCAL:1 = ADD_BANQUETS_MAX
  665. ENDIF
  666. FOR LOCAL, 0, LOCAL:1
  667. VARSET HOST_LIST
  668. SPLIT GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "HOST_LIST"), "/", HOST_LIST
  669. SIF FINDELEMENT(HOST_LIST, TOSTR(ARG),,,1) >= 0
  670. RETURNF LOCAL
  671. NEXT
  672. RETURNF -1
  673.  
  674. @ADD_BANQUET_RESET_ALL
  675. ADD_BANQUETS_LAST_DAY_CHECKED = 0
  676.  
  677. VARSET ADD_BANQUETS_UPCOMING
  678. VARSET ADD_BANQUETS_STATUS
  679. VARSET ADD_BANQUETS_LOCATION
  680. VARSET ADD_BANQUETS_START_TIME
  681. VARSET ADD_BANQUETS_START_DAY
  682. VARSET ADD_BANQUETS_DURATION
  683. VARSET ADD_BANQUETS_SCALE
  684. VARSET ADD_BANQUETS_VISITED
  685. VARSET ADD_BANQUETS_INVITED
  686.  
  687. @ADD_BANQUET_ARRIVAL
  688. #DIM BANQUET_INDEX
  689. BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置)
  690. SIF BANQUET_INDEX < 0
  691. RETURN
  692.  
  693. IF !ADD_BANQUETS_VISITED:BANQUET_INDEX
  694. CALLFORM ADD_BANQUET_VISIT{ADD_BANQUETS_UPCOMING:BANQUET_INDEX}(ADD_BANQUETS_STATUS:BANQUET_INDEX)
  695. ADD_BANQUETS_VISITED:BANQUET_INDEX = 1
  696. ENDIF
  697.  
  698. @ADD_BANQUET_HELP_PREPARE
  699. #DIM BANQUET_INDEX
  700. BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置,1)
  701. SIF BANQUET_INDEX < 0
  702. RETURN
  703.  
  704. TRYCCALLFORM ADD_BANQUET_HELP_PREPARE{ADD_BANQUETS_UPCOMING:BANQUET_INDEX}
  705. CATCH
  706. PRINTFORML You help %CALLNAME:TARGET% with %ADD_BANQUET_TERM(ADD_BANQUETS_UPCOMING:BANQUET_INDEX)% preparations.
  707. ENDCATCH
  708.  
  709. @ADD_BANQUET_DATE_CHECK(ARG)
  710. #FUNCTION
  711. #DIM BANQUET_INDEX
  712. SIF !(TALENT:ARG:恋慕 || TALENT:ARG:思慕)
  713. RETURNF 0
  714. SIF !CFLAG:ARG:BANQUET
  715. RETURNF 0
  716.  
  717. BANQUET_INDEX = ADD_BANQUET_INDEX(CFLAG:ARG:BANQUET)
  718. SIF BANQUET_INDEX < 0
  719. RETURNF 0
  720. SIF GET_MAPID(ADD_BANQUETS_LOCATION:BANQUET_INDEX) == MAIN_MAP
  721. RETURNF 0
  722. SIF GET_MAPID(ADD_BANQUETS_LOCATION:BANQUET_INDEX) == GET_MAPID(CFLAG:MASTER:現在位置)
  723. RETURNF 0
  724. SIF ADD_BANQUET_TIME_UNTIL(BANQUET_INDEX) > 600
  725. RETURNF 0
  726.  
  727. RETURNF 1
  728.  
  729. @ADD_BANQUET_PRINT_CALENDAR
  730. #DIM DYNAMIC BANQUET_COUNT
  731. SETCOLOR C_GREEN
  732. LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
  733. IF LOCAL:1 == 0
  734. RETURN
  735. ELSEIF LOCAL:1 == -1
  736. LOCAL:1 = ADD_BANQUETS_MAX
  737. ENDIF
  738. FOR LOCAL, 0, LOCAL:1
  739. SIF ADD_BANQUETS_INVITED:LOCAL <= 0
  740. CONTINUE
  741. IF ADD_BANQUETS_START_DAY:LOCAL == DAY
  742. IF BANQUET_COUNT
  743. PRINTL
  744. PRINT │  │
  745. ENDIF
  746. PRINTFORM %時刻表示(ADD_BANQUETS_START_TIME:LOCAL)% at %ADD_BANQUET_LOCATION(LOCAL)%, %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "NAME")%
  747. BANQUET_COUNT++
  748. ENDIF
  749. NEXT
  750. RESETCOLOR
  751. RETURN BANQUET_COUNT
  752.  
  753. @EVENTEND
  754. #PRI
  755. #DIM DYNAMIC LIQUOR_DRINKERS
  756. ADD_BANQUETS_LIQUOR_STOCK_REDUCTION = 0
  757.  
  758. LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
  759. IF LOCAL:1 == 0
  760. RETURN
  761. ELSEIF LOCAL:1 == -1
  762. LOCAL:1 = ADD_BANQUETS_MAX
  763. ENDIF
  764.  
  765. FOR LOCAL, 0, LOCAL:1
  766. IF ADD_BANQUETS_START_DAY:LOCAL == DAY + 1 && GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "DRINKING")
  767. IF !RAND:1 ;not every time, due to there being many more banquets now
  768. ADD_BANQUETS_LIQUOR_STOCK_REDUCTION ++
  769. ENDIF
  770. ENDIF
  771. NEXT
  772.  
  773. DEBUGPRINTFORML Liquor stock reduction = {ADD_BANQUETS_LIQUOR_STOCK_REDUCTION}
  774.  
  775. @ADD_BANQUET_EIKI_DIARY_CHECK()
  776. #FUNCTION
  777. SIF DIARY:30:24
  778. RETURNF 0
  779. SIF !TALENT:30:思慕
  780. RETURNF 0
  781. FOR LOCAL, 2, 5
  782. SIF !ADD_BANQUET_ACTIVE(LOCAL)
  783. CONTINUE
  784. IF ADD_BANQUETS_START_DAY:LOCAL % 2 == 1
  785. FLAG:宴会開催フラグ = LOCAL ;set this to ensure Eiki uses the correct text
  786. RETURNF 1
  787. ENDIF
  788. NEXT
  789. RETURNF 0
  790.  
  791. ;sunday = 0
  792. @ADD_BANQUET_NEXT_DAY_OF_WEEK(DAY_OF_WEEK)
  793. #FUNCTION
  794. #DIM DAY_OF_WEEK
  795. IF DAY % 7 <= DAY_OF_WEEK
  796. LOCAL = DAY + DAY_OF_WEEK - DAY % 7
  797. ELSE
  798. LOCAL = DAY + (7 - DAY % 7 + DAY_OF_WEEK)
  799. ENDIF
  800.  
  801. SIF LOCAL == DAY
  802. RETURNF LOCAL + 7
  803. RETURNF LOCAL
  804.  
  805. ;gets the DAY when the next desired date happens
  806. ;DAY_OF_WEEK is the desired day of the week, WEEK_OF_MONTH is which week it should fit in (zero-based), so the second sunday of the month would be (0, 1)
  807. @ADD_BANQUET_NEXT_MONTHLY_DAY(DAY_OF_WEEK, WEEK_OF_MONTH)
  808. #FUNCTION
  809. #DIM DAY_OF_WEEK
  810. #DIM WEEK_OF_MONTH
  811. #DIM START_OF_MONTH
  812. #DIM CALCULATED_DAY
  813.  
  814. ;first get the start of the current month
  815. START_OF_MONTH = DAY - (DAY % 31) + 1
  816.  
  817. REPEAT 2
  818. CALCULATED_DAY = START_OF_MONTH
  819.  
  820. SIF CALCULATED_DAY % 7 > DAY_OF_WEEK
  821. CALCULATED_DAY += 7
  822.  
  823. ;first occurence of this day of the week
  824. CALCULATED_DAY += DAY_OF_WEEK - CALCULATED_DAY % 7
  825. CALCULATED_DAY += WEEK_OF_MONTH * 7
  826.  
  827. IF CALCULATED_DAY > DAY
  828. RETURNF CALCULATED_DAY
  829. ENDIF
  830.  
  831. ;if we're past that date this month, try the next month, if that fails too, somehow, return -1
  832. START_OF_MONTH += 31
  833. REND
  834. RETURNF -1
  835.  
  836. ;returns true if character would be awake for the duration
  837. @ADD_BANQUET_SCHEDULE_CHECK(ARG, BANQUET_INDEX)
  838. #FUNCTION
  839. #DIM BANQUET_INDEX
  840. #DIM START_TIME
  841. #DIM END_TIME
  842. START_TIME = ADD_BANQUETS_START_TIME:BANQUET_INDEX
  843. END_TIME = START_TIME + ADD_BANQUETS_DURATION:BANQUET_INDEX
  844.  
  845. RETURNF !INRANGE(CFLAG:ARG:起床時間, START_TIME, END_TIME) && !INRANGE(CFLAG:ARG:就寝時間, START_TIME, END_TIME) ;sleeps in the middle
  846.  
  847. ;clean up character outfits if they move away
  848. @EVENTCOMEND
  849. #PRI
  850. FOR LOCAL, 0, CHARANUM
  851. IF TCVAR:LOCAL:DRESSED_FOR_BANQUET && CFLAG:LOCAL:現在位置 != GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:(ADD_BANQUET_INDEX(TCVAR:LOCAL:DRESSED_FOR_BANQUET)))
  852. CALLFORM ADD_BANQUET_RESET_OUTFIT{TCVAR:LOCAL:DRESSED_FOR_BANQUET}(LOCAL)
  853. ENDIF
  854. NEXT
  855.  
  856. @ADD_BANQUET_IS_PERFORMER(ARG, BANQUET_ID)
  857. #FUNCTION
  858. #DIM BANQUET_ID
  859. SIF STRCOUNT(GET_STR(0, "ADD_BANQUET", BANQUET_ID, "PERFORMERS"), @"(^|\/){ARG}(\/|$)")
  860. RETURNF 1
  861. RETURNF 0
  862.  
  863. TRANSLATION\Addition\Banquets\Add_Banquet.ERB at line 851Error has occurred:Emuera1824+v18+EMv17+EEv40
  864. IF TCVAR:LOCAL:DRESSED_FOR_BANQUET && CFLAG:LOCAL:現在位置 != GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:(ADD_BANQUET_INDEX(TCVAR:LOCAL:DRESSED_FOR_BANQUET)))
  865. Error description: Array variable "ADD_BANQUETS_LOCATION" at the 1 argument (-1) is out of the range of the array
  866. Function: @EVENTCOMEND(file:TRANSLATION\Addition\Banquets\Add_Banquet.ERB in line 848)
  867. Function call stack:
  868. ※※※Log file emuera.log has been created. Please provide stacktrace or save data with steps to reproduce to help fix it※※※
  869.  
  870.  
  871. I am guessing that an ongoing banquet was cancelled midway by a summer storm while I was in like 400 minute purgatory when coming back from a date
  872. I had an umbrella that broke and probably was gonna get a confession if that matters
Add Comment
Please, Sign In to add comment