Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ADD_BANQUET_CHECK
- SIF !FLAG:宴会の有無
- RETURN
- SIF ADD_BANQUETS_LAST_DAY_CHECKED == DAY
- RETURN
- FLAG:宴会開催フラグ = 0
- FLAG:宴会規模 = 0
- FOR LOCAL, 0, ADD_BANQUETS_MAX
- SIF !ADD_BANQUETS_UPCOMING:LOCAL
- CONTINUE
- CALL ADD_BANQUET_STATUS_CHECK(LOCAL)
- SELECTCASE ADD_BANQUETS_STATUS:LOCAL
- CASE ADD_BANQUET_STATE_FINISHED, ADD_BANQUET_STATE_CANCELLED
- CALL ADD_BANQUET_END(LOCAL)
- ENDSELECT
- NEXT
- FOR LOCAL, 1, OBJ_ID_LAST
- IF GET_INT(0, "ADD_BANQUET", LOCAL, "CONDITIONS") && ADD_BANQUET_INDEX(LOCAL) < 0 ;no doubling up of banquets
- CALLFORM ADD_BANQUET_PLANNING{LOCAL}
- ENDIF
- NEXT
- ;cleanup of character values, just in case
- FOR LOCAL, 1, CHARANUM
- IF !CFLAG:LOCAL:BANQUET || (CFLAG:LOCAL:BANQUET && !ADD_BANQUET_ACTIVE(CFLAG:LOCAL:BANQUET))
- CFLAG:LOCAL:BANQUET = 0
- CFLAG:LOCAL:BANQUET_ROLE = 0
- CFLAG:LOCAL:宴会参加 = 0
- ENDIF
- NEXT
- ADD_BANQUETS_LAST_DAY_CHECKED = DAY
- @ADD_BANQUET_SET_PARTICIPANTS
- #DIM DAY_TO_CHECK
- FOR LOCAL, 0, ADD_BANQUETS_MAX
- SIF !ADD_BANQUETS_UPCOMING:LOCAL
- CONTINUE
- SIF ADD_BANQUETS_STATUS:LOCAL != ADD_BANQUET_STATE_PLANNED
- CONTINUE
- DAY_TO_CHECK = ADD_BANQUETS_START_DAY:LOCAL
- SIF ADD_BANQUETS_START_TIME:LOCAL - (ADD_BANQUETS_SCALE:LOCAL / 30) - 15 < 0
- DAY_TO_CHECK --
- IF DAY_TO_CHECK <= DAY
- DEBUGPRINTFORML Setting participants for banquet %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "NAME")%:
- WAIT
- CALLFORM ADD_BANQUET_SET_PARTICIPANTS{ADD_BANQUETS_UPCOMING:LOCAL}
- ENDIF
- NEXT
- @ADD_BANQUET_CREATE(BANQUET_ID, LOCATION, START_TIME, START_DAY, DURATION, SCALE)
- #DIM BANQUET_ID
- #DIM LOCATION
- #DIM START_TIME
- #DIM START_DAY
- #DIM DURATION
- #DIM SCALE
- #DIM INDEX
- INDEX = -1
- FOR LOCAL, 0, ADD_BANQUETS_MAX
- IF ADD_BANQUETS_UPCOMING:LOCAL == 0
- INDEX = LOCAL
- BREAK
- ENDIF
- NEXT
- IF INDEX < 0 ;no slots open
- DEBUGPRINTFORML Cannot create banquet {BANQUET_ID}. No open slots available.
- RETURN -1
- ENDIF
- ADD_BANQUETS_UPCOMING:INDEX = BANQUET_ID
- ADD_BANQUETS_LOCATION:INDEX = LOCATION
- ADD_BANQUETS_START_TIME:INDEX = START_TIME
- ADD_BANQUETS_START_DAY:INDEX = START_DAY
- ADD_BANQUETS_STATUS:INDEX = 1
- ADD_BANQUETS_DURATION:INDEX = DURATION
- ADD_BANQUETS_SCALE:INDEX = SCALE
- RETURN INDEX
- @ADD_BANQUET_PROGRESS
- #DIM BANQUET_ID
- FOR LOCAL, 0, ADD_BANQUETS_MAX
- IF ADD_BANQUETS_UPCOMING:LOCAL > 0
- CALL ADD_BANQUET_STATUS_CHECK(LOCAL)
- ENDIF
- NEXT
- @ADD_BANQUET_END(BANQUET_INDEX)
- #DIM BANQUET_INDEX
- #DIM BANQUET_ID
- BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- SIF !BANQUET_ID
- RETURN
- FOR LOCAL, 1, CHARANUM
- IF CFLAG:LOCAL:BANQUET == BANQUET_ID
- CFLAG:LOCAL:BANQUET = 0
- CFLAG:LOCAL:BANQUET_ROLE = 0
- ENDIF
- NEXT
- IF BANQUET_INDEX >= 0
- ARRAYREMOVE ADD_BANQUETS_UPCOMING, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_LOCATION, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_STATUS, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_START_TIME, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_START_DAY, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_SCALE, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_DURATION, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_VISITED, BANQUET_INDEX, 1
- ARRAYREMOVE ADD_BANQUETS_INVITED, BANQUET_INDEX, 1
- ENDIF
- @ADD_BANQUET_ACTIVE(BANQUET_ID)
- #FUNCTION
- #DIM BANQUET_ID
- RETURNF ADD_BANQUET_INDEX(BANQUET_ID) >= 0
- @ADD_BANQUET_INDEX(BANQUET_ID)
- #FUNCTION
- #DIM BANQUET_ID
- RETURNF FINDELEMENT(ADD_BANQUETS_UPCOMING, BANQUET_ID)
- @ADD_BANQUET_STATUS_CHECK(BANQUET_INDEX)
- #DIM BANQUET_INDEX
- #DIM LOCATION
- #DIM BANQUET_ID
- #DIM PREVIOUS_STATE
- LOCATION = GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
- BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- PREVIOUS_STATE = ADD_BANQUETS_STATUS:BANQUET_INDEX
- 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
- ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_FINISHED
- CALLFORM ADD_BANQUET_FINISH{BANQUET_ID}
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
- CONTINUE
- SIF !CFLAG:LOCAL:BANQUET_ROLE
- CONTINUE
- IF CFLAG:LOCAL:BANQUET_ROLE > 1
- ;主催者は片付け予定をセット(仕事量は最大1200)
- CFLAG:LOCAL:片付け仕事量 = MIN(ADD_BANQUETS_SCALE:BANQUET_INDEX / 6, 1200)
- CFLAG:LOCAL:片付け場所 = ADD_BANQUETS_LOCATION:BANQUET_INDEX
- CFLAG:LOCAL:BANQUET_CLEANUP = CFLAG:LOCAL:BANQUET
- ENDIF
- ;reset values
- CALL ADD_BANQUET_END_PARTICIPATION(LOCAL)
- NEXT
- SIF ADD_BANQUETS_INVITED:BANQUET_INDEX
- PRINTFORML %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")% has ended.
- 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
- DEBUGPRINTFORML Setting banquet {BANQUET_ID} to in-progress state
- ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_IN_PROGRESS
- ;set workloads
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
- CONTINUE
- SIF !CFLAG:LOCAL:BANQUET_ROLE
- CONTINUE
- SIF CFLAG:LOCAL:睡眠 && GET_INT(0, "ADD_BANQUET", BANQUET_ID, "KEEP_AWAKE")
- CALL CHARA_AWAKE, LOCAL
- CALLFORM ADD_BANQUET_WORKLOAD_PARTICIPATION{BANQUET_ID}(LOCAL, ADD_BANQUETS_SCALE:BANQUET_INDEX)
- CFLAG:LOCAL:職場 = LOCATION
- NEXT
- 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
- IF ADD_BANQUET_TIME_CHECK(ADD_BANQUETS_START_DAY:BANQUET_INDEX, ADD_BANQUETS_START_TIME:BANQUET_INDEX - (ADD_BANQUETS_SCALE:BANQUET_INDEX / 30) - 15)
- DEBUGPRINTFORML Setting banquet {BANQUET_INDEX} to preparation state
- ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_PREPARING
- ;set workloads
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
- CONTINUE
- SIF CFLAG:LOCAL:BANQUET_ROLE <= 1
- CONTINUE
- SIF CFLAG:LOCAL:睡眠 && GET_INT(0, "ADD_BANQUET", BANQUET_ID, "KEEP_AWAKE")
- CALL CHARA_AWAKE, LOCAL
- CALLFORM ADD_BANQUET_WORKLOAD_PREPARATION{BANQUET_ID}(LOCAL)
- CFLAG:LOCAL:職場 = LOCATION
- NEXT
- ENDIF
- ENDIF
- SELECTCASE PREVIOUS_STATE
- CASE ADD_BANQUET_STATE_PLANNED
- CASE ADD_BANQUET_STATE_PREPARING
- SIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_PREPARING
- CALLFORM ADD_BANQUET_PROGRESS{BANQUET_ID}(BANQUET_INDEX)
- CASE ADD_BANQUET_STATE_IN_PROGRESS
- SIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
- CALLFORM ADD_BANQUET_PROGRESS{BANQUET_ID}(BANQUET_INDEX)
- CASE ADD_BANQUET_STATE_FINISHED
- CASE ADD_BANQUET_STATE_CANCELLED
- ENDSELECT
- CALL ADD_BANQUET_WEATHER_CHECK(BANQUET_INDEX)
- ;check participants and move them if needed
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:BANQUET != ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- CONTINUE
- SIF CFLAG:LOCAL:現在位置 == LOCATION
- CONTINUE
- SIF CFLAG:LOCAL:睡眠
- CONTINUE
- SIF CFLAG:LOCAL:職種 == 酔いつぶれる
- CONTINUE
- IF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_PREPARING
- IF CFLAG:LOCAL:BANQUET_ROLE > 1
- CALLFORM ADD_BANQUET_PREPARATION_TEXT{BANQUET_ID}(LOCAL, LOCATION)
- CFLAG:LOCAL:現在位置 = LOCATION
- SIF CFLAG:LOCAL:うふふ
- CALL ENDUFUFU(LOCAL)
- ENDIF
- ELSEIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
- IF CFLAG:LOCAL:BANQUET_ROLE && !睡眠時間(LOCAL)
- CALLFORM ADD_BANQUET_JOIN_TEXT{BANQUET_ID}(LOCAL, LOCATION)
- CFLAG:LOCAL:現在位置 = LOCATION
- SIF CFLAG:LOCAL:うふふ
- CALL ENDUFUFU(LOCAL)
- ENDIF
- ENDIF
- NEXT
- ;start only after everyone has been moved
- SIF PREVIOUS_STATE != ADD_BANQUET_STATE_IN_PROGRESS && ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
- CALLFORM ADD_BANQUET_START{BANQUET_ID}
- IF !ADD_BANQUETS_VISITED:BANQUET_INDEX && ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS && CFLAG:MASTER:現在位置 == LOCATION
- CALLFORM ADD_BANQUET_VISIT{BANQUET_ID}(PREVIOUS_STATE)
- ADD_BANQUETS_VISITED:BANQUET_INDEX = 1
- ENDIF
- IF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
- IF CFLAG:MASTER:現在位置 == LOCATION
- FLAG:宴会開催フラグ = BANQUET_ID
- FLAG:参加人数 = ADD_BANQUET_PARTICIPANT_COUNT(BANQUET_INDEX)
- FLAG:宴会規模 = ADD_BANQUETS_SCALE:BANQUET_INDEX
- ENDIF
- ENDIF
- @ADD_BANQUET_TIME_CHECK(DAY_TO_CHECK, TIME_TO_CHECK)
- #FUNCTION
- #DIM DAY_TO_CHECK
- #DIM TIME_TO_CHECK
- IF TIME_TO_CHECK < 0
- DAY_TO_CHECK--
- TIME_TO_CHECK = 1440 - TIME_TO_CHECK
- ELSEIF TIME_TO_CHECK >= 1440
- DAY_TO_CHECK++
- TIME_TO_CHECK = TIME_TO_CHECK - 1440
- ENDIF
- SIF DAY > DAY_TO_CHECK
- RETURNF 1
- SIF DAY >= DAY_TO_CHECK && TIME >= TIME_TO_CHECK
- RETURNF 1
- RETURNF 0
- @ADD_BANQUET_PREVENT_MOVEMENT(CHARA)
- #FUNCTION
- #DIM CHARA
- SIF CFLAG:CHARA:職種 == 酔いつぶれる
- RETURNF 0
- RETURNF ADD_BANQUET_CHARA_STATE(CHARA)
- @ADD_BANQUET_PRINT_OVERVIEW
- #DIM DYNAMIC UPCOMING_PRINTED
- SIF FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_INVITED) < 0 && FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_STAFF) < 0
- RETURN
- LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
- IF LOCAL:1 == 0
- RETURN
- ELSEIF LOCAL:1 == -1
- LOCAL:1 = ADD_BANQUETS_MAX
- ENDIF
- FOR LOCAL, 0, LOCAL:1
- SIF ADD_BANQUETS_STATUS:LOCAL >= ADD_BANQUET_STATE_FINISHED
- CONTINUE
- SIF ADD_BANQUETS_INVITED:LOCAL <= 0
- CONTINUE
- IF UPCOMING_PRINTED
- PRINTFORML Upcoming events:
- UPCOMING_PRINTED = 1
- ENDIF
- PRINTFORML %ADD_BANQUET_TIME_AND_PLACE_SHORT_DESCRIPTION(LOCAL)%
- PRINTFORM %CAPITALIZE(ADD_BANQUET_TERM(ADD_BANQUETS_UPCOMING:LOCAL))% Size:
- SELECTCASE ADD_BANQUETS_SCALE:LOCAL
- CASE IS >= 5000
- PRINT Grand
- CASE IS >= 2500
- PRINT Big
- CASE IS >= 1500
- PRINT Medium
- CASEELSE
- PRINT Small
- ENDSELECT
- IF GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "WEATHER_DEPENDENT")
- IF !GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "ALTERNATIVE_INDOOR_LOCATION")
- PRINTL Can Get Canceled Due To Rain
- ELSE
- PRINTL Can Get Moved Due To Rain
- ENDIF
- ELSE
- PRINTL
- ENDIF
- PRINTL
- NEXT
- @ADD_BANQUET_PRINT_TODAYS_EVENTS
- SIF FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_INVITED) < 0 && FINDELEMENT(ADD_BANQUETS_INVITED, ADD_BANQUET_INVITE_STAFF) < 0
- RETURN
- LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
- IF LOCAL:1 == 0
- RETURN
- ELSEIF LOCAL:1 == -1
- LOCAL:1 = ADD_BANQUETS_MAX
- ENDIF
- FOR LOCAL, 0, LOCAL:1
- SIF ADD_BANQUETS_INVITED:LOCAL <= 0
- CONTINUE
- SIF ADD_BANQUETS_START_DAY:LOCAL == DAY
- PRINTFORML %ADD_BANQUET_TIME_AND_PLACE_DESCRIPTION(LOCAL)%
- NEXT
- @ADD_BANQUET_FILL_PARTICIPANTS(BANQUET_INDEX, ResidentRate, VisitorRate)
- #DIM BANQUET_INDEX
- #DIM BANQUET_ID
- #DIM ResidentRate
- #DIM VisitorRate
- #DIMS DYNAMIC HOST_LIST, キャラクタ数上限
- #DIMS DYNAMIC GUEST_LIST, キャラクタ数上限
- #DIMS DYNAMIC BANNED_LIST, キャラクタ数上限
- BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- SIF !BANQUET_ID
- RETURN
- SPLIT GET_STR(0, "ADD_BANQUET", BANQUET_ID, "HOST_LIST"), "/", HOST_LIST
- SPLIT GET_STR(0, "ADD_BANQUET", BANQUET_ID, "GUEST_LIST"), "/", GUEST_LIST
- SPLIT GET_STR(0, "ADD_BANQUET", BANQUET_ID, "BANNED_LIST"), "/", BANNED_LIST
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:出禁
- CONTINUE
- IF FINDELEMENT(HOST_LIST, TOSTR(LOCAL),,,1) >= 0
- CFLAG:LOCAL:BANQUET = BANQUET_ID
- CFLAG:LOCAL:BANQUET_ROLE = 2
- CFLAG:LOCAL:宴会参加 = 2
- TCVAR:LOCAL:仕事開始 = -1 ;block regular work
- TCVAR:LOCAL:仕事終了 = -1 ;block regular work
- ELSEIF FINDELEMENT(GUEST_LIST, TOSTR(LOCAL),,,1) >= 0
- CFLAG:LOCAL:BANQUET = BANQUET_ID
- CFLAG:LOCAL:BANQUET_ROLE = 1
- CFLAG:LOCAL:宴会参加 = 1
- TCVAR:LOCAL:仕事開始 = -1 ;block regular work
- TCVAR:LOCAL:仕事終了 = -1 ;block regular work
- ELSEIF FINDELEMENT(BANNED_LIST, TOSTR(LOCAL),,,1) < 0 ;not banned
- SIF CFLAG:LOCAL:BANQUET ;already spoken for
- CONTINUE
- TRYCCALLFORM ADD_BANQUET_PARTICIPANT_JOIN_CHECK{BANQUET_ID}(LOCAL)
- CATCH
- CALL ADD_BANQUET_PARTICIPANT_DEFAULT_CHECK(LOCAL, ADD_BANQUETS_LOCATION:BANQUET_INDEX, ResidentRate, VisitorRate)
- ENDCATCH
- IF RESULT
- CFLAG:LOCAL:BANQUET = BANQUET_ID
- CFLAG:LOCAL:BANQUET_ROLE = 1
- CFLAG:LOCAL:宴会参加 = 1
- TCVAR:LOCAL:仕事開始 = -1 ;block regular work
- TCVAR:LOCAL:仕事終了 = -1 ;block regular work
- ENDIF
- ENDIF
- NEXT
- [IF_DEBUG]
- PRINTFORML %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% guests:
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:BANQUET != BANQUET_ID
- CONTINUE
- PRINTFORML %CALLNAME:LOCAL%: \@ CFLAG:LOCAL:BANQUET_ROLE == 2 ? Host # Guest \@
- NEXT
- [ENDIF]
- FLAG:宴会開催フラグ = BANQUET_ID ;mostly for old dialogue
- FLAG:宴会規模 = ADD_BANQUETS_SCALE:BANQUET_INDEX
- @ADD_BANQUET_PARTICIPANT_DEFAULT_CHECK(ARG, LOCATION, ResidentRate, VisitorRate)
- #DIM ResidentRate
- #DIM VisitorRate
- #DIM VenueMap
- #DIM LOCATION
- VenueMap = GET_MAPID(LOCATION)
- IF GET_MAPID(CFLAG:ARG:自宅位置) == VenueMap
- IF RAND:100 < ResidentRate
- RETURN 1
- ENDIF
- ELSE
- IF RAND:100 < VisitorRate
- RETURN 1
- ENDIF
- ENDIF
- RETURN 0
- @ADD_BANQUET_TIME_AND_PLACE_DESCRIPTION(BANQUET_INDEX)
- #FUNCTIONS
- #DIM BANQUET_INDEX
- #DIM DAYS_UNTIL
- #DIM START_TIME
- SIF ADD_BANQUETS_UPCOMING:BANQUET_INDEX < 0
- RETURNF @"ERROR: No valid banquet at slot {BANQUET_INDEX}"
- DAYS_UNTIL = ADD_BANQUETS_START_DAY:BANQUET_INDEX - DAY
- START_TIME = ADD_BANQUETS_START_TIME:BANQUET_INDEX
- LOCALS =
- SELECTCASE DAYS_UNTIL
- CASE 0
- LOCALS += "Today"
- CASE 1
- LOCALS += "Tomorrow"
- CASEELSE
- LOCALS += @"{DAYS_UNTIL} days from now"
- ENDSELECT
- LOCALS += @", %時刻表示(START_TIME)% at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%,「%GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")%」will be held."
- RETURNF LOCALS
- @ADD_BANQUET_TIME_AND_PLACE_SHORT_DESCRIPTION(BANQUET_INDEX)
- #FUNCTIONS
- #DIM BANQUET_INDEX
- #DIM DAYS_UNTIL
- #DIM START_TIME
- SIF !ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- RETURNF @"ERROR: No valid banquet at slot {BANQUET_INDEX}"
- DAYS_UNTIL = ADD_BANQUETS_START_DAY:BANQUET_INDEX - DAY
- START_TIME = ADD_BANQUETS_START_TIME:BANQUET_INDEX
- LOCALS =
- SIF ADD_BANQUETS_STATUS:BANQUET_INDEX == ADD_BANQUET_STATE_IN_PROGRESS
- RETURNF @"Right now, at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%: %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")%"
- SELECTCASE DAYS_UNTIL
- CASE 0
- LOCALS += "Today"
- CASE 1
- LOCALS += "Tomorrow"
- CASEELSE
- LOCALS += @"{DAYS_UNTIL} days from now"
- ENDSELECT
- LOCALS += @", %時刻表示(START_TIME)% at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%: %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, "NAME")%"
- RETURNF LOCALS
- @ADD_BANQUET_LOCATION(BANQUET_INDEX)
- #FUNCTIONS
- #DIM BANQUET_INDEX
- SIF !ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- RETURNF @"ERROR: No valid banquet at slot {BANQUET_INDEX}"
- LOCALS =
- IF IN_HOME(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
- RETURNF NAME_FROM_PLACE(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
- ELSE
- RETURNF @"%GET_MAPNAME(ADD_BANQUETS_LOCATION:BANQUET_INDEX/100)% - %GET_PLACENAME(ADD_BANQUETS_LOCATION:BANQUET_INDEX)%"
- ENDIF
- @ADD_BANQUET_TIME_UNTIL(BANQUET_INDEX)
- #FUNCTION
- #DIM BANQUET_INDEX
- SIF !ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- RETURNF 0
- RETURNF (ADD_BANQUETS_START_DAY:BANQUET_INDEX - DAY) * 1440 + ADD_BANQUETS_START_TIME:BANQUET_INDEX - TIME
- @ADD_BANQUET_WEATHER_CHECK(BANQUET_INDEX)
- #DIM BANQUET_INDEX
- #DIM BANQUET_ID
- #DIM PRESENT
- BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- PRESENT = CFLAG:MASTER:現在位置 == GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
- SIF !BANQUET_ID
- RETURN
- SIF !GROUPMATCH(ADD_BANQUETS_STATUS:BANQUET_INDEX, ADD_BANQUET_STATE_PREPARING, ADD_BANQUET_STATE_IN_PROGRESS)
- RETURN
- SIF !GET_INT(0, "ADD_BANQUET", BANQUET_ID, "WEATHER_DEPENDENT")
- RETURN
- SIF ADD_BANQUETS_LOCATION:BANQUET_INDEX == GET_INT(0, "ADD_BANQUET", BANQUET_ID, "ALTERNATIVE_INDOOR_LOCATION")
- RETURN
- SIF TIME:5 < 4
- RETURN
- IF TIME:5 >= 4 && CFLAG:[[天子]]:BANQUET == BANQUET_ID
- 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.
- TIME:5 = 0
- WIND_VELOCITY = 0
- FORBIDDEN_CHANGE_WEATHER = 1
- ELSEIF TIME:5 >= 4
- ;not possible during extreme weather
- IF ITEM:ウェザー・リポート && !FLAG:異常気象
- PRINTFORML You feel as if %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% is about to get cancelled due to weather.
- PRINTFORML Do you want to use %ITEMNAME_TR(GETNUM(ITEM, "ウェザー・リポート"))% to clear it up?
- CALL ASK_YN
- IF !RESULT
- PRINTFORMDL 『Weather Report』!
- PRINTFORMDW The weather immediately clears up, allowing %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% to continue as planned.
- TIME:5 = 0
- WIND_VELOCITY = 0
- FORBIDDEN_CHANGE_WEATHER = 1
- ITEM:ウェザー・リポート--
- RETURN
- ENDIF
- ENDIF
- PRINTL
- IF GET_INT(0, "ADD_BANQUET", BANQUET_ID, "ALTERNATIVE_INDOOR_LOCATION")
- ADD_BANQUETS_LOCATION:BANQUET_INDEX = GET_INT(0, "ADD_BANQUET", BANQUET_ID, "ALTERNATIVE_INDOOR_LOCATION")
- PRINTFORMW Due to the weather, %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% has been relocated to %ADD_BANQUET_LOCATION(BANQUET_INDEX)%.
- IF PRESENT
- PRINTFORML Everyone quickly picks something up and prepares to move to the new venue.
- PRINTFORML Do you want to help them?
- CALL ASK_YN
- IF !RESULT
- CFLAG:MASTER:現在位置 = GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
- CFLAG:MASTER:デート中 = GET_MAPID(CFLAG:MASTER:現在位置)
- PRINTFORMW You grab some things and join the others at %ADD_BANQUET_LOCATION(BANQUET_INDEX)%.
- ELSE
- PRINTFORMW You opt not to join the others and remain where you were.
- ENDIF
- CALL ADD_BANQUET_STATUS_CHECK(BANQUET_INDEX)
- ENDIF
- ELSE
- PRINTFORMW Unfortunately, %GET_STR(0, "ADD_BANQUET", BANQUET_ID, "NAME")% has been canceled due to bad weather.
- ADD_BANQUETS_STATUS:BANQUET_INDEX = ADD_BANQUET_STATE_CANCELLED
- FOR LOCAL, 1, CHARANUM
- IF CFLAG:LOCAL:BANQUET == BANQUET_ID
- CALL ADD_BANQUET_END_PARTICIPATION(LOCAL)
- ENDIF
- NEXT
- ENDIF
- ENDIF
- ;0=nothing, 1=attending, 2=preparing
- @ADD_BANQUET_CHARA_STATE(CHARA)
- #FUNCTION
- #DIM CHARA
- SIF !CFLAG:CHARA:BANQUET
- RETURNF 0
- SIF !ADD_BANQUET_ACTIVE(CFLAG:CHARA:BANQUET)
- RETURNF 0
- SELECTCASE ADD_BANQUETS_STATUS:ADD_BANQUET_INDEX(CFLAG:CHARA:BANQUET)
- CASE ADD_BANQUET_STATE_PREPARING
- RETURNF CFLAG:CHARA:BANQUET_ROLE > 1 ? 2 # 0
- CASE ADD_BANQUET_STATE_IN_PROGRESS
- RETURNF CFLAG:CHARA:BANQUET_ROLE ? 1 # 0
- ENDSELECT
- RETURNF 0
- @ADD_BANQUET_TERM(BANQUET_ID)
- #FUNCTIONS
- #DIM BANQUET_ID
- RETURNF GET_STR(0, "ADD_BANQUET", BANQUET_ID, "TERM")
- @ADD_ACTIVE_BANQUET_AT_LOCATION(LOCATION, INCLUDE_PREPARATION_PHASE = 0)
- #FUNCTION
- #DIM LOCATION
- #DIM INCLUDE_PREPARATION_PHASE
- FOR LOCAL, 0, ADD_BANQUETS_MAX
- SIF !ADD_BANQUETS_UPCOMING:LOCAL
- CONTINUE
- SIF ADD_BANQUETS_STATUS:LOCAL != ADD_BANQUET_STATE_IN_PROGRESS && !(INCLUDE_PREPARATION_PHASE && ADD_BANQUETS_STATUS:LOCAL == ADD_BANQUET_STATE_PREPARING)
- CONTINUE
- SIF GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:LOCAL) == LOCATION
- RETURNF LOCAL
- NEXT
- RETURNF -1
- @ADD_BANQUET_PARTICIPANT_COUNT(BANQUET_INDEX)
- #FUNCTION
- #DIM BANQUET_INDEX
- #DIM BANQUET_ID
- #DIM LOCATION
- #DIM DYNAMIC PARTICIPANT_COUNT
- BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- SIF !BANQUET_ID
- RETURNF 0
- SIF ADD_BANQUETS_STATUS:BANQUET_INDEX != ADD_BANQUET_STATE_IN_PROGRESS
- RETURNF 0
- LOCATION = GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:BANQUET_INDEX)
- FOR LOCAL, 1, CHARANUM
- SIF CFLAG:LOCAL:BANQUET == BANQUET_ID && CFLAG:LOCAL:現在位置 == LOCATION
- PARTICIPANT_COUNT++
- NEXT
- RETURNF PARTICIPANT_COUNT
- @ADD_BANQUET_ACTIVITY_ALLOWED(ACTIVITY, ALLOW_UNINVITED = 0)
- #FUNCTION
- #DIMS ACTIVITY
- #DIM BANQUET_INDEX
- #DIM ALLOW_UNINVITED
- BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置)
- SIF BANQUET_INDEX < 0
- RETURNF 0
- SIF ALLOW_UNINVITED == 0 && ADD_BANQUETS_INVITED:BANQUET_INDEX <= 0
- RETURNF 0
- RETURNF GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:BANQUET_INDEX, ACTIVITY)
- @ADD_BANQUET_MESSAGE_TALK
- #DIM BANQUET_INDEX
- BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置)
- SIF BANQUET_INDEX < 0
- RETURN
- CALLFORM ADD_BANQUET_MESSAGE_TALK{ADD_BANQUETS_UPCOMING:BANQUET_INDEX}
- @ADD_BANQUET_END_PARTICIPATION(ARG)
- BASE:ARG:仕事量 = 0
- CFLAG:ARG:職種 = 0
- CFLAG:ARG:職場 = 0
- CFLAG:ARG:行動 = 0
- TCVAR:ARG:手伝えない = 0
- CFLAG:ARG:BANQUET = 0
- CFLAG:ARG:BANQUET_ROLE = 0
- SIF 睡眠時間(ARG)
- CALL CHARA_SLEEP(ARG, 0)
- @ADD_BANQUET_IS_PERFORMING(ARG)
- #FUNCTION
- #DIM BANQUET_INDEX
- #DIM BANQUET_ID
- BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:ARG:現在位置, 1)
- SIF BANQUET_INDEX < 0
- RETURNF 0
- BANQUET_ID = ADD_BANQUETS_UPCOMING:BANQUET_INDEX
- SIF CFLAG:ARG:BANQUET != BANQUET_ID || CFLAG:ARG:BANQUET_ROLE < 2 ;not their own concert
- RETURNF 0
- SIF !GET_INT(0, "ADD_BANQUET", BANQUET_ID, "LISTEN_TO_MUSIC") ;not a concert
- RETURNF 0
- RETURNF 1
- @ADD_BANQUET_HOSTING_UPCOMING(ARG)
- #FUNCTION
- #DIMS HOST_LIST, キャラクタ数上限
- LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
- IF LOCAL:1 == 0
- RETURNF -1
- ELSEIF LOCAL:1 == -1
- LOCAL:1 = ADD_BANQUETS_MAX
- ENDIF
- FOR LOCAL, 0, LOCAL:1
- VARSET HOST_LIST
- SPLIT GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "HOST_LIST"), "/", HOST_LIST
- SIF FINDELEMENT(HOST_LIST, TOSTR(ARG),,,1) >= 0
- RETURNF LOCAL
- NEXT
- RETURNF -1
- @ADD_BANQUET_RESET_ALL
- ADD_BANQUETS_LAST_DAY_CHECKED = 0
- VARSET ADD_BANQUETS_UPCOMING
- VARSET ADD_BANQUETS_STATUS
- VARSET ADD_BANQUETS_LOCATION
- VARSET ADD_BANQUETS_START_TIME
- VARSET ADD_BANQUETS_START_DAY
- VARSET ADD_BANQUETS_DURATION
- VARSET ADD_BANQUETS_SCALE
- VARSET ADD_BANQUETS_VISITED
- VARSET ADD_BANQUETS_INVITED
- @ADD_BANQUET_ARRIVAL
- #DIM BANQUET_INDEX
- BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置)
- SIF BANQUET_INDEX < 0
- RETURN
- IF !ADD_BANQUETS_VISITED:BANQUET_INDEX
- CALLFORM ADD_BANQUET_VISIT{ADD_BANQUETS_UPCOMING:BANQUET_INDEX}(ADD_BANQUETS_STATUS:BANQUET_INDEX)
- ADD_BANQUETS_VISITED:BANQUET_INDEX = 1
- ENDIF
- @ADD_BANQUET_HELP_PREPARE
- #DIM BANQUET_INDEX
- BANQUET_INDEX = ADD_ACTIVE_BANQUET_AT_LOCATION(CFLAG:MASTER:現在位置,1)
- SIF BANQUET_INDEX < 0
- RETURN
- TRYCCALLFORM ADD_BANQUET_HELP_PREPARE{ADD_BANQUETS_UPCOMING:BANQUET_INDEX}
- CATCH
- PRINTFORML You help %CALLNAME:TARGET% with %ADD_BANQUET_TERM(ADD_BANQUETS_UPCOMING:BANQUET_INDEX)% preparations.
- ENDCATCH
- @ADD_BANQUET_DATE_CHECK(ARG)
- #FUNCTION
- #DIM BANQUET_INDEX
- SIF !(TALENT:ARG:恋慕 || TALENT:ARG:思慕)
- RETURNF 0
- SIF !CFLAG:ARG:BANQUET
- RETURNF 0
- BANQUET_INDEX = ADD_BANQUET_INDEX(CFLAG:ARG:BANQUET)
- SIF BANQUET_INDEX < 0
- RETURNF 0
- SIF GET_MAPID(ADD_BANQUETS_LOCATION:BANQUET_INDEX) == MAIN_MAP
- RETURNF 0
- SIF GET_MAPID(ADD_BANQUETS_LOCATION:BANQUET_INDEX) == GET_MAPID(CFLAG:MASTER:現在位置)
- RETURNF 0
- SIF ADD_BANQUET_TIME_UNTIL(BANQUET_INDEX) > 600
- RETURNF 0
- RETURNF 1
- @ADD_BANQUET_PRINT_CALENDAR
- #DIM DYNAMIC BANQUET_COUNT
- SETCOLOR C_GREEN
- LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
- IF LOCAL:1 == 0
- RETURN
- ELSEIF LOCAL:1 == -1
- LOCAL:1 = ADD_BANQUETS_MAX
- ENDIF
- FOR LOCAL, 0, LOCAL:1
- SIF ADD_BANQUETS_INVITED:LOCAL <= 0
- CONTINUE
- IF ADD_BANQUETS_START_DAY:LOCAL == DAY
- IF BANQUET_COUNT
- PRINTL
- PRINT │ │
- ENDIF
- PRINTFORM %時刻表示(ADD_BANQUETS_START_TIME:LOCAL)% at %ADD_BANQUET_LOCATION(LOCAL)%, %GET_STR(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "NAME")%
- BANQUET_COUNT++
- ENDIF
- NEXT
- RESETCOLOR
- RETURN BANQUET_COUNT
- @EVENTEND
- #PRI
- #DIM DYNAMIC LIQUOR_DRINKERS
- ADD_BANQUETS_LIQUOR_STOCK_REDUCTION = 0
- LOCAL:1 = FINDELEMENT(ADD_BANQUETS_UPCOMING, 0)
- IF LOCAL:1 == 0
- RETURN
- ELSEIF LOCAL:1 == -1
- LOCAL:1 = ADD_BANQUETS_MAX
- ENDIF
- FOR LOCAL, 0, LOCAL:1
- IF ADD_BANQUETS_START_DAY:LOCAL == DAY + 1 && GET_INT(0, "ADD_BANQUET", ADD_BANQUETS_UPCOMING:LOCAL, "DRINKING")
- IF !RAND:1 ;not every time, due to there being many more banquets now
- ADD_BANQUETS_LIQUOR_STOCK_REDUCTION ++
- ENDIF
- ENDIF
- NEXT
- DEBUGPRINTFORML Liquor stock reduction = {ADD_BANQUETS_LIQUOR_STOCK_REDUCTION}
- @ADD_BANQUET_EIKI_DIARY_CHECK()
- #FUNCTION
- SIF DIARY:30:24
- RETURNF 0
- SIF !TALENT:30:思慕
- RETURNF 0
- FOR LOCAL, 2, 5
- SIF !ADD_BANQUET_ACTIVE(LOCAL)
- CONTINUE
- IF ADD_BANQUETS_START_DAY:LOCAL % 2 == 1
- FLAG:宴会開催フラグ = LOCAL ;set this to ensure Eiki uses the correct text
- RETURNF 1
- ENDIF
- NEXT
- RETURNF 0
- ;sunday = 0
- @ADD_BANQUET_NEXT_DAY_OF_WEEK(DAY_OF_WEEK)
- #FUNCTION
- #DIM DAY_OF_WEEK
- IF DAY % 7 <= DAY_OF_WEEK
- LOCAL = DAY + DAY_OF_WEEK - DAY % 7
- ELSE
- LOCAL = DAY + (7 - DAY % 7 + DAY_OF_WEEK)
- ENDIF
- SIF LOCAL == DAY
- RETURNF LOCAL + 7
- RETURNF LOCAL
- ;gets the DAY when the next desired date happens
- ;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)
- @ADD_BANQUET_NEXT_MONTHLY_DAY(DAY_OF_WEEK, WEEK_OF_MONTH)
- #FUNCTION
- #DIM DAY_OF_WEEK
- #DIM WEEK_OF_MONTH
- #DIM START_OF_MONTH
- #DIM CALCULATED_DAY
- ;first get the start of the current month
- START_OF_MONTH = DAY - (DAY % 31) + 1
- REPEAT 2
- CALCULATED_DAY = START_OF_MONTH
- SIF CALCULATED_DAY % 7 > DAY_OF_WEEK
- CALCULATED_DAY += 7
- ;first occurence of this day of the week
- CALCULATED_DAY += DAY_OF_WEEK - CALCULATED_DAY % 7
- CALCULATED_DAY += WEEK_OF_MONTH * 7
- IF CALCULATED_DAY > DAY
- RETURNF CALCULATED_DAY
- ENDIF
- ;if we're past that date this month, try the next month, if that fails too, somehow, return -1
- START_OF_MONTH += 31
- REND
- RETURNF -1
- ;returns true if character would be awake for the duration
- @ADD_BANQUET_SCHEDULE_CHECK(ARG, BANQUET_INDEX)
- #FUNCTION
- #DIM BANQUET_INDEX
- #DIM START_TIME
- #DIM END_TIME
- START_TIME = ADD_BANQUETS_START_TIME:BANQUET_INDEX
- END_TIME = START_TIME + ADD_BANQUETS_DURATION:BANQUET_INDEX
- RETURNF !INRANGE(CFLAG:ARG:起床時間, START_TIME, END_TIME) && !INRANGE(CFLAG:ARG:就寝時間, START_TIME, END_TIME) ;sleeps in the middle
- ;clean up character outfits if they move away
- @EVENTCOMEND
- #PRI
- FOR LOCAL, 0, CHARANUM
- IF TCVAR:LOCAL:DRESSED_FOR_BANQUET && CFLAG:LOCAL:現在位置 != GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:(ADD_BANQUET_INDEX(TCVAR:LOCAL:DRESSED_FOR_BANQUET)))
- CALLFORM ADD_BANQUET_RESET_OUTFIT{TCVAR:LOCAL:DRESSED_FOR_BANQUET}(LOCAL)
- ENDIF
- NEXT
- @ADD_BANQUET_IS_PERFORMER(ARG, BANQUET_ID)
- #FUNCTION
- #DIM BANQUET_ID
- SIF STRCOUNT(GET_STR(0, "ADD_BANQUET", BANQUET_ID, "PERFORMERS"), @"(^|\/){ARG}(\/|$)")
- RETURNF 1
- RETURNF 0
- TRANSLATION\Addition\Banquets\Add_Banquet.ERB at line 851Error has occurred:Emuera1824+v18+EMv17+EEv40
- IF TCVAR:LOCAL:DRESSED_FOR_BANQUET && CFLAG:LOCAL:現在位置 != GET_MAP_REPLACEMENT(ADD_BANQUETS_LOCATION:(ADD_BANQUET_INDEX(TCVAR:LOCAL:DRESSED_FOR_BANQUET)))
- Error description: Array variable "ADD_BANQUETS_LOCATION" at the 1 argument (-1) is out of the range of the array
- Function: @EVENTCOMEND(file:TRANSLATION\Addition\Banquets\Add_Banquet.ERB in line 848)
- Function call stack:
- ※※※Log file emuera.log has been created. Please provide stacktrace or save data with steps to reproduce to help fix it※※※
- 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
- I had an umbrella that broke and probably was gonna get a confession if that matters
Add Comment
Please, Sign In to add comment