๐ [English] [็ฎไฝไธญๆ] [็น้ซไธญๆ] [ํ๊ตญ์ด]
- cactbot UI๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- cactbot UI๋ก ํธ๋ฆฌ๊ฑฐ ๋ฌธ์์ด ์์ ํ๊ธฐ
- User ๋๋ ํ ๋ฆฌ ๊ฐ์
- User ๋๋ ํ ๋ฆฌ ์ค์ ํ๊ธฐ
- ๋์์ธ ์์ ํ๊ธฐ
- Raidboss ํธ๋ฆฌ๊ฑฐ ๋ฎ์ด์ฐ๊ธฐ
- Raidboss ํ์๋ผ์ธ ๋ฎ์ด์ฐ๊ธฐ
- ์ด๋ณด๋ฅผ ์ํ ๋ฌด์์ ๋ฐ๋ผํ๊ธฐ
- ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ค์ ํ๊ธฐ
- User ํ์ผ ๋๋ฒ๊น
cactbot์ ์ฌ์ฉ์ ์ค์ ํ์ค ๋ cactbot์ ์ค์ UI๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ACT -> Plugins -> OverlayPlugin.dll -> Cactbot ์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค:
- ํธ๋ฆฌ๊ฑฐ์ TTS ์ค์ ํ๊ธฐ
- ํธ๋ฆฌ๊ฑฐ ๋นํ์ฑํํ๊ธฐ
- cactbot ์ธ์ด ๋ณ๊ฒฝํ๊ธฐ
- ๋ณผ๋ฅจ ์ค์
- ์์์ ๋จน์ผ๋ผ๋ ์น์ฆ ์์ด์ฝ ์์ ๊ธฐ
cactbot ์ค์ UI์์ ์ํ๋ ๋ชจ๋ ๊ฒ๋ค์ ์ค์ ํ ์๋ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง, ์ด ๋ฐฉ๋ฒ์ด ์ค์ ํ๊ธฐ์ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค. ๋ํ, ์ ๋ฐ์ดํธ๋ฅผ ์งํํจ์ ๋ฐ๋ผ ๋ ๋ง์ ์ต์ ์ด ์ถ๊ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ต์
๋ค์
%APPDATA%\Advanced Combat Tracker\Config\RainbowMage.OverlayPlugin.config.json
ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
์ ํ์ผ์ ์ง์ ์์ ํ์ง ์๋๋ก ํ์ธ์.
ACT -> Plugins -> OverlayPlugin.dll -> Cactbot -> Raidboss์ ์๋ cactbot ์ค์ UI์๋ ๊ฐ๋ณ์ ์ธ ํธ๋ฆฌ๊ฑฐ ๋ชฉ๋ก์ด ๋์ด๋์ด ์์ต๋๋ค. ์ด ๋ชฉ๋ก ๋ด์ฉ์ ์์ ํด์ ํธ๋ฆฌ๊ฑฐ๋ณ๋ก ๋ค์ํ ์ค์ ์ ์์ ํ ์ ์์ต๋๋ค.
์ด๋ฆ ์์ ์ข
๋ชจ์(๐)์ด ์๋ ์ค์ ๊ฐ์ ํธ๋ฆฌ๊ฑฐ์์ ์ถ๋ ฅํ๋ ๋ฉ์์ง์ด๋ฉฐ, ์ด ์ค์ ๋์ ์ด์ฉํด ์์ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, "${player}" ํฑ๋ฒ
๋ผ๋ ๋ด์ฉ์ด ๋ค์ด์๋ ๐onTarget ์
๋ ฅ๋์ด ์๋ค๊ณ ์นฉ์๋ค.
์ด๊ฒ์ด ์ด๋ค ํ๋ ์ด์ด์๊ฒ ํฑํฌ ๋ฒ์คํฐ๊ฐ ์ค๊ณ ์์ ๋ ํ๋ฉด์(๋๋ TTS๋ก) ์ถ๋ ฅํ ๋ฌธ์์ด์
๋๋ค.
๊ทธ ์ค ${player}
๋ ํธ๋ฆฌ๊ฑฐ์ ์ํด ๋์ ์ผ๋ก ์ค์ ๋๋ ๋งค๊ฐ๋ณ์์
๋๋ค.
${๋ณ์๋ช
}
๊ฐ์ ๋ชจ์ต์ ๋ฌธ์์ด์ ๊ทธ๋ฐ ๋์ ๋งค๊ฐ๋ณ์์
๋๋ค.
์๋ ์ถ๋ ฅ ๋ฌธ์์ด ๋์ ${player}๊ฐ ์ฃฝ์ผ๋ ค๊ณ ํด์!
๋ฅผ ์ถ๋ ฅํ๋๋ก ๋ฐ๊ฟ ์ ์๊ฒ ์ฃ .
์๋๋ฉด, ๋๊ฐ ๋ง์์ง ์ ๊ฒฝ์ฐ์ง ์๋๋ค๋ฉด, ํฑ๋ฒ
๋ก ์งง๊ฒ ์์ ํ ์๋ ์์ต๋๋ค.
๋ง์ฝ ๋ฎ์ด์ด ๊ฒ์ ๋๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด, ๊ทธ๋ฅ ์
๋ ฅํ ํ
์คํธ๋ฅผ ๋น์ฐ๋ฉด ๋ฉ๋๋ค.
์ด ๋ฎ์ด์ฐ๊ธฐ ๊ธฐ๋ฅ์๋ ์ฝ๊ฐ์ ์ ํ ์ฌํญ์ด ์์ต๋๋ค.
ํธ๋ฆฌ๊ฑฐ ์๋ ๋
ผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ด์.
๋, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ alarmText
์ ๋ค๋ฅธ TTS
๊ฐ ์ถ๋ ฅ๋๋๋ก ํ ์ ์์ด์.
๋งค๊ฐ๋ณ์๋ฅผ ์๋ก ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
๋ง์ฝ ์ด๋ฐ ์์ ๋ ๋ณต์กํ ์์ ์ ํ๊ณ ์ถ๋ค๋ฉด,
Raidboss ํธ๋ฆฌ๊ฑฐ ๋ฎ์ด์ฐ๊ธฐ ๋ฌธ๋จ์ ํ์ธํ์ธ์.
๋ง์ฝ cactbot UI๊ฐ ์ํ๋ ์ต์ ์ ์ ๊ณตํ์ง ์๋๋ค๋ฉด, User ํ์ผ ๋ฎ์ด์ฐ๊ธฐ(override)๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ JavaScript์ CSS๋ฅผ ์์ฑํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ฝ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ง์์ด ํ์ํ ์ ์์ต๋๋ค.
cactbot์ "๋ชจ๋ ์ฌ์ฉ์ ์ค์ ์ User ๋๋ ํ ๋ฆฌ ํ์ผ์๋ง ๋ค์ด๊ฐ์ผ ํ๋ค"๋ ์ ์ ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ๋๋ฌธ์ cactbot์ด ์ ๋ฐ์ดํธ๋ ๋ ์ฌ์ฉ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฎ์ด์ฐ์ด์ง ์๊ฒ ๋ฉ๋๋ค. ๋ํ, ์ถํ cactbot release ํ์ผ์ ์ง์ ์์ ํ๊ฒ๋๋ฉด ์ถ๊ฐ ๋น๋ ์์ ์ ํ์ง ์๊ณ ๋ ์ ๋๋ก ์๋ํ์ง ์์๊ฒ์ ๋๋ค.
๋ชจ๋ cactbot UI ๋ชจ๋์ ์ฌ์ฉ์ ์ค์ ์ user/ ๋๋ ํ ๋ฆฌ์์ ๋ถ๋ฌ์ต๋๋ค.
raidboss
๋ชจ๋์ user/raidboss.js
์ user/raidboss.css
๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
oopsyraidsy
๋ชจ๋์ user/oopsyraidsy.js
์ user/oopsyraidsy.css
๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
๋ค๋ฅธ ๋ชจ๋๋ค๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
์ด ํ์ผ๋ค์ cactbot์ ๊ธฐ๋ณธ ํ์ผ๋ค๊ณผ ํจ๊ป ๋ถ๋ฌ์ค๋ฉฐ, ๊ธฐ๋ณธ ์ค์ ๋ค์ ๋ฎ์ด์์ธ ์ ์์ต๋๋ค.
user/
๋๋ ํ ๋ฆฌ๋ ์ด๋ฏธ ๋ช๋ช ์์ ์ค์ ํ์ผ๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค.
์ด๋ฆ์ ๋ฐ๊ฟ์ ์ฌ์ฉํ ์๋ ์๊ณ ์.
์๋ฅผ ๋ค์ด, user/raidboss-example.js ํ์ผ์
user/raidboss.js
๋ก ์ด๋ฆ ๋ฐ๊ฟ ์ ์๊ณ
raidboss
๋ชจ๋์ ๊ธฐ๋ฅ์ ๋ฐ๊พธ๋๋ก ์์ ํ ์ ์์ต๋๋ค.
์ด ํ์ผ๋ค์ ์์ ํ ๋ค์ ACT ์ค๋ฒ๋ ์ด ํ๋ฌ๊ทธ์ธ ์ค์ ์ฐฝ์ ํด๋นํ๋ ์ค๋ฒ๋ ์ด์ "์๋ก๊ณ ์นจ" ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค.
cactbot user ๊ฒฝ๋ก๋ cactbot ์ค์ UI์์ ์ค์ ํ ์ ์์ต๋๋ค.
ACT -> Plugins -> OverlayPlugin.dll -> Cactbot -> Cactbot ์ฌ์ฉ์ ๋๋ ํ ๋ฆฌ ์์
๋๋ ํ ๋ฆฌ ์ ํ
๋ฒํผ์ ํด๋ฆญํ๊ณ ์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ ํํ์ธ์.
๋ฐ๋ก ์ค์ ํ์ง ์๋๋ค๋ฉด, cactbot์ด ์ค์น๋ ๊ฒฝ๋ก๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
๊ฐ๋ฅํ๋ฉด cactbot์ด ์ค์น๋ cactbot/user
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ณดํต์ %APPDATA%\Advanced Combat Tracker\Plugins\cactbot\cactbot\user
(ํด๋ฃจ๋ด์ ์ฌ์ฉํ๋ค๋ฉด, ACT ์ค์น ๊ฒฝ๋ก\Plugins\cactbot\user
)์
๋๋ค.
ํ์ง๋ง ํด๋ฃจ๋ด์ ์ฌ์ฉํ์ ๋ค๋ฉด, cactbot ์ ๋ฐ์ดํธ์ cactbot ํด๋ ๋ด ๋ด์ฉ์ด ์ ๋ถ ์ด๊ธฐํ๋๋ฏ๋ก ์ธ๋ถ์ ๋ค๋ฅธ user ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ณณ์ ๊ฒฝ๋ก๋ก ์ค์ ํ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
์ด ํด๋์๋ ์์ ์ค์ ํ์ผ๋ค์ด ์์ต๋๋ค.
user/<name>.css
ํ์ผ์ ๊ฐ ์ค๋ฒ๋ ์ด ์์๋ค์ ์์น, ํฌ๊ธฐ, ์๊น ๋ฑ์ ์์ ํ ์ ์์ต๋๋ค.
ui/<name>/<name>.css
๋ฅผ ๋ณด๊ณ ์์ ํ ์ ์๋ ์
๋ ํฐ(selector)๋ฅผ ํ์ธํ์ธ์.
ui/raidboss/raidboss.css์ ์์๋ฅผ ๋ณด์๋ฉด,
#popup-text-container
์ #timeline-container
๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ค์ ์์น๋ฅผ user/raidboss.css
์์ ์ํ๋ ๋ค๋ฅธ ์์น๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
user/raidboss.css
๋ก ๋ค๋ฅธ ์ถ๊ฐ์ ์ธ ์คํ์ผ๋ง๋ ๊ฐ๋ฅํฉ๋๋ค.
.info-text
ํด๋์ค์ CSS ๊ท์น์ ์ถ๊ฐํ์ฌ Info ํ
์คํธ ์๋์ ํฌ๊ธฐ์ ์๊น๋ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
.info-text {
font-size: 200%;
color: rgb(50, 100, 50);
}
User ๋๋ ํ ๋ฆฌ์ CSS๋ cactbot์ ๊ธฐ๋ณธ CSS ์๋์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์, CSS ๋ช
์๋ ๊ท์น์ ๋ฐ๋ผ,
!important
๋ฅผ ์ถ๊ฐํด์ ์ค์ ํ ๊ท์น์ ๊ฐ์ ๋ก ๋ฎ์ด์ฐ๋๋ก ํ ์ ์์ต๋๋ค.
๋ํ, ๊ธฐ๋ณธ ์ค์ ๊ฐ์ ํด์ ํ๋ ค๋ฉด ํด๋น ๊ฐ์ auto
๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
CSS ๋ฌธ์ ๋ฅผ ๋๋ฒ๊ทธํ๊ธฐ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ Chrome ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ACT -> Plugins -> OverlayPlugin.dll -> ์ํ๋ ์ค๋ฒ๋ ์ด -> ๊ฐ๋ฐ์ ๋๊ตฌ ์ด๊ธฐ ๋ฅผ ํด๋ฆญํด์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด ์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ผ๋ถ๋ถ์ ์์ ํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ํ์๋ผ์ธ ๋ง๋ ๊ฐ์ ๊ฒ๋ค์ด ๊ทธ ์์์ ๋๋ค. ์ผ๋ถ๋ถ์ ์ฌ์ฉ์ ์์(custom element)๋ฅผ ์ฌ์ฉํ๊ณ , ์ฌ์ฉ์ ์์๋ ๋ณ๋๋ก ํ๋ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง์ฝ ์์ ์ด ๋ถ๊ฐ๋ฅํ ํ์๋ผ์ธ ๋ง๋์ ๋ํด ์ํ๋ ์์ ์ฌํญ์ด ์๋ค๋ฉด, ์ผ๋ง๋ ์ง Github Issue์ ๊ธ์ ์์ฑํด์ฃผ์ธ์.
๊ฒฝ๊ณ : cactbot์ CSS ํ์ ํธํ ์ ์ง๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. ๋์ค์ cactbot์์ ์์๋ค์ ์ฌ๋ฐฐ์ด ํ ์๋ ์๊ณ , ์์ ์ด๋ฆ๊ณผ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๊ณ . ์คํ์ผ๋ง ์ ์ฒด๋ฅผ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, cactbot์ CSS๋ฅผ ์์ ํ๋ ๊ฒ์ ์ค์ค๋ก ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
cactbot/user/raidboss.js
๋ฅผ ์ด์ฉํด์ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋ฎ์ด์์ธ ์ ์์ต๋๋ค.
์ถ๋ ฅํ๋ ๋ฌธ์์ด์ ์์ ํ๊ฑฐ๋,
์ด๋ค ์ง์
์ ๋์์ผ๋ก ๋ฐ๋ํ๋์ง,
๊ทธ๋ฆฌ๊ณ ์ผ๋ง๋ ์ค๋ ํ๋ฉด์ ๋ ์๋์ง,
์ด์ธ์ ๋ค๋ฅธ ๊ฒ๋ค์ ์์ ํ ์ ์์ต๋๋ค.
cactbot/user/raidboss.js
์์
Options.Triggers
๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์ฑํ๊ฑฐ๋
์ด๋ฏธ ์กด์ฌํ๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์ ํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ฝ User ํ์ผ์ด ์ด๋ฏธ ์๋ ํธ๋ฆฌ๊ฑฐ(cactbot์ ๋ด์ฅ๋ ํธ๋ฆฌ๊ฑฐ ํฌํจ)์
๊ฐ์ id๋ฅผ ์ฌ์ฉํ๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ค๋ฉด, ๊ธฐ์กด ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋ฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์ ํ๊ธฐ ์ ์ ๊ฐ ํธ๋ฆฌ๊ฑฐ์ ์๋ ๋ค์ํ ์ค์ ๊ฐ์ด ์ด๋ค ๊ฒ์ ์๋ฏธํ๋์ง ์ดํดํ๊ธฐ ์ํด์ ํธ๋ฆฌ๊ฑฐ ๊ฐ์ด๋๋ฅผ ์ฝ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ์์ ์ฝ๋ ๋ธ๋ก์
cactbot/user/raidboss.js
์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
Options.Triggers.push({
// ํ์ผ ์ต์๋จ์ ์๋ ZoneId๋ฅผ ์ฐพ์ผ์ธ์
// ์์) ZoneId.MatchAll (๋ชจ๋ ์ง์ญ) ๋๋ ZoneId.TheBozjanSouthernFront.
zoneId: ZoneId.PutTheZoneFromTheTopOfTheFileHere,
triggers: [
{
// ์ด ๊ณณ์ด ํธ๋ฆฌ๊ฑฐ ๊ฐ์ฒด๋ฅผ ๋ฃ๋ ๊ณณ์
๋๋ค.
// ์์) id / netRegex / infoText
},
],
});
ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์ ํ ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์
์์ ์๋ ์ฝ๋ ๋ธ๋ก์ ๊ฐ ํธ๋ฆฌ๊ฑฐ์ ๋ถ์ฌ๋ฃ๋ ๊ฒ์
๋๋ค.
zoneId
์ ์ด ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ํ ์ง์ญ ID๋ฅผ ์
๋ ฅํ์ธ์.
๋ณดํต cactbot ํธ๋ฆฌ๊ฑฐ ํ์ผ ์ต์๋จ์ ์ ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํ์ผ์ ๋ชจ๋ ์ง์ญ ID ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๊ณ ์์ต๋๋ค.
๋ง์ฝ ์ฌ๋ฐ๋ฅธ ์ง์ญ ID๋ฅผ ์
๋ ฅํ์ง ์๋๋ค๋ฉด, ์ค๋ฒ๋ ์ด ํ๋ฌ๊ทธ์ธ ๋ก๊ทธ ์ฐฝ์ warning์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
๊ทธ ๋ค์, ํธ๋ฆฌ๊ฑฐ ํ
์คํธ๋ฅผ ๋ธ๋ก ์์ ๋ณต์ฌํ์ฌ ํ์ํ ๋งํผ ์์ ํ์ธ์.
์ด ๊ณผ์ ์ ์์ ํ๊ณ ์ถ์ ๋ชจ๋ ํธ๋ฆฌ๊ฑฐ์ ๋ํด ๋ฐ๋ณตํ๋ฉด ๋ฉ๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ ค๋ฉด, raidboss ์ค๋ฒ๋ ์ด๋ฅผ ์๋ก๊ณ ์นจํ์ธ์.
์ฐธ๊ณ : ์ด ๋ฐฉ์์ ๊ธฐ์กด ํธ๋ฆฌ๊ฑฐ์ ๋์์ ์์ ํ ์ ๊ฑฐํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์์ ํ ๋ ๋์ ๋ก์ง ๋ถ๋ถ์ ์ ๊ฑฐํ์ง ๋ง์ธ์. ๋ํ, ์ด๊ฑด JavaScript์ด๊ธฐ ๋๋ฌธ์ ์ ํจํ JavaScript ์ฝ๋์ฌ์ผ ํฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋ผ๋ฉด, ๋ฌด์์ ์ด๋ป๊ฒ ์์ ํ๊ณ ์๋์ง ๋๋์ฑ ์กฐ์ฌํ์ธ์.
๋น์ ์ด ์ ๋ฐํ๋ฅผ ํ๋ ค๊ณ ํ๋ค๊ณ ์นฉ์๋ค. ๋น์ ์ ๊ณต๋๋ ์ฒ์ ๋ถ์ฅํ๋ cactbot์ด ๊ธฐ๋ณธ์ผ๋ก ๋ถ๋ฌ์ฃผ๋ "๋ถ ๊ฐ์ด๋ง๊ธฐ" ๋์ ์ "๋ถ ๋์์ ๋ฐ์ผ๋ก"๋ฅผ ๋จผ์ ํ๊ธฐ๋ก ์กฐ์จํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ํธ๋ฆฌ๊ฑฐ์ ์ถ๋ ฅ์ ์์ ํ์ฌ ์กฐ์ ํ๋ ๊ฒ์ด ์์ต๋๋ค. fireball #1 ์๋ณธ ํธ๋ฆฌ๊ฑฐ๋ ui/raidboss/data/04-sb/ultimate/unending_coil_ultimate.js์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด ์ฝ๋๋ค์ cactbot/user/raidboss.js
ํ์ผ ์๋ ๋ถ๋ถ์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
Options.Triggers.push({
zoneId: ZoneId.TheUnendingCoilOfBahamutUltimate,
triggers: [
{
id: 'UCU Nael Fireball 1',
netRegex: NetRegexes.ability({ source: 'Ragnarok', id: '26B8', capture: false }),
delaySeconds: 35,
suppressSeconds: 99999,
// infoText๋ ํ๋ฉด์ ์ด๋ก์์ผ๋ก ํ์๋๋ ๋ฌธ๊ตฌ์
๋๋ค.
infoText: {
ko: '๋ถ ๋์์ ๋ฐ์ผ๋ก',
},
run: function(data) {
data.naelFireballCount = 1;
},
},
],
});
์ด ์์ ๋ณธ์ tts
๋ถ๋ถ์ ์ ๊ฑฐํ๊ณ ํ๊ตญ์ด ์ด์ธ์ ๋ค๋ฅธ ์ธ์ด๋ ์ ๊ฑฐํฉ๋๋ค.
์ง๊ธ์ ๋๋ฐ ์๋ฆผ์ด ๊ฐ์ ํํฐ๋ ์ฐํฉ ํํฐ์ ์๋ ๊ฒฝ์ฐ์๋ง ์๋ํ๊ณ , ์ผ๋ถ ์ง์ ์ ๋ํด์๋ง ์๋ํ๊ณ ์์ต๋๋ค. ์ด ์์๋ ์ด๋ป๊ฒ ๋ชจ๋ ํ๋ ์ด์ด์ ๋ํด ์๋ฆผ์ ๋ณด์ฌ์ฃผ๋๋ก ๋ง๋ค ์ ์๋์ง ๋ณด์ฌ์ค๋๋ค. ๋๋ฐ ํธ๋ฆฌ๊ฑฐ๋ ui/raidboss/data/00-misc/general.js์์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ค์ ์์๋ condition
ํจ์(function)๊ฐ ์์ ๋ ๋ฒ์ ์
๋๋ค.
์ด ํธ๋ฆฌ๊ฑฐ๋ cactbot์ ๋ด์ฅ๋ ํธ๋ฆฌ๊ฑฐ์ธ General Provoke
์ id๊ฐ ๋์ผํ๊ธฐ ๋๋ฌธ์
์ด ํธ๋ฆฌ๊ฑฐ๊ฐ ๊ธฐ๋ณธ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฎ์ด์ธ ๊ฒ ์
๋๋ค.
์ด ์ฝ๋๋ค์ cactbot/user/raidboss.js
ํ์ผ ์๋ ๋ถ๋ถ์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
Options.Triggers.push({
zoneId: ZoneId.MatchAll,
triggers: [
{
id: 'General Provoke',
netRegex: NetRegexes.ability({ id: '1D6D' }),
condition: function(data, matches) {
// ๊ฐ์ ํํฐ๊ฐ ์๋ ์ฌ๋๋ค๊น์ง๋ ๋๋ฐ ์๋ฆผ์ ๋ฐ๊ณ ์ถ๊ฑฐ๋
// ๋ด๊ฐ ํฑ์ปค๊ฐ ์๋ ๊ฒฝ์ฐ
return true;
},
infoText: (data, matches, output) => {
return output.text({ player: data.party.member(matches.source) });
},
outputStrings: {
text: {
en: 'Provoke: ${player}',
de: 'Herausforderung: ${player}',
fr: 'Provocation: ${player}',
ja: 'ๆ็บ: ${player}',
cn: 'ๆ่ก
: ${player}',
ko: '๋๋ฐ: ${player}',
},
},
},
],
});
์ด ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ condition
ํจ์๋ฅผ ์์ ํ ์ง์๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
condition์ด ์๋ ํธ๋ฆฌ๊ฑฐ๋ ์ ๊ท์์ด ๋ง์ ๋๋ง๋ค ํญ์ ์๋ํ๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด์ ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ปค์คํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค.
์๋ ์์๋ "๊ฐ๋ ๋ฒ๊ฐ" ๋๋ฒํ๋ฅผ ๋ฐ์ 1์ด ํ์ "Get out!!!" ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ์ปค์คํ ํธ๋ฆฌ๊ฑฐ์ ๋๋ค.
Options.Triggers.push([
{
zoneId: ZoneId.MatchAll,
triggers: [
{
// ์ด id๋ ์๋ก ๋ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ cactbot ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฎ์ด์ฐ์ง ์์ต๋๋ค.
id: 'Personal Forked Lightning',
regex: Regexes.gainsEffect({ effect: '๊ฐ๋ ๋ฒ๊ฐ' }),
condition: (data, matches) => { return matches.target === data.me; },
delaySeconds: 1,
alertText: 'Get out!!!',
},
// ... ์ํ๋ค๋ฉด ๋ค๋ฅธ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ถ๊ฐํ์ธ์
],
},
// ... ์ํ๋ค๋ฉด ๋ค๋ฅธ ์ง์ญ์ ์ถ๊ฐํ์ธ์
]);
cactbot ํธ๋ฆฌ๊ฑฐ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ ์์ธํ ๋ฐฐ์ฐ๋ ค๋ฉด ํธ๋ฆฌ๊ฑฐ ๊ฐ์ด๋์ ui/raidboss/data์ ์ด๋ฏธ ์กด์ฌํ๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฝ์ด๋ณด์ธ์.
Raidboss ํ์๋ผ์ธ์ ๋ฎ์ด์ฐ๋ ๊ฒ์ Raidboss ํธ๋ฆฌ๊ฑฐ ๋ฎ์ด์ฐ๊ธฐ์ ๋น์ทํฉ๋๋ค.
ํ์๋ผ์ธ์ ๋ฎ์ด์ฐ๊ธฐ ์ํ ๊ณผ์ :
-
ํ์๋ผ์ธ ํ ์คํธ ํ์ผ์ cactbot์์ user ํด๋๋ก ๋ณต์ฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ui/raidboss/data/05-shb/ultimate/the_epic_of_alexander.txt๋ฅผ
user/the_epic_of_alexander.txt
๋ก ๋ณต์ฌํ ์ ์๊ฒ ์ฃ . -
user/raidboss.js ํ์ผ์ ์ด ํ์๋ผ์ธ ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ ์ํ ๋ถ๋ถ์ ์ถ๊ฐํ์ธ์.
ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ด,
zoneId
์ ๊ตฌํ(section)์ ์ถ๊ฐํฉ๋๋ค.overrideTimelineFile: true
๋ฅผ zoneId ์๋์ ์ถ๊ฐํ๊ณ ,timelineFile
์ ํ์๋ผ์ธ ํ ์คํธ ํ์ผ์ ์ด๋ฆ์ ์ถ๊ฐํ์ธ์.Options.Triggers.push({ zoneId: ZoneId.TheEpicOfAlexanderUltimate, overrideTimelineFile: true, timelineFile: 'the_epic_of_alexander.txt', });
๋น์ ์ด ์ฒซ๋ฒ์งธ ๊ณผ์ ์ ๋ฐ๋ผ์
user/the_epic_of_alexander.txt
ํ์ผ์ ์์ฑํ๋ค๋ฉด,overrideTimelineFile: true
์ ์ค์ ํจ์ผ๋ก์จ cactbot์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋ ํ์๋ผ์ธ ๋์ ์๋ก ์ถ๊ฐํ ํ์๋ผ์ธ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. -
ํ์ํ ๋งํผ user ํด๋์ ์๋ ์ ํ์๋ผ์ธ ํ์ผ์ ์์ ํ์ธ์.
ํ์๋ผ์ธ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์๊ณ ์ถ๋ค๋ฉด ํ์๋ผ์ธ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ฐธ๊ณ : ํ์๋ผ์ธ์ ์์ ํ๋ ๊ฒ์ ์ฝ๊ฐ์ ์ํ ์์๊ฐ ์์ต๋๋ค.
ํ์๋ผ์ธ ํ
์คํธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์๋ํ๋ ํ์๋ผ์ธ ํธ๋ฆฌ๊ฑฐ๊ฐ ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ด์ฃ .
์๋ฅผ ๋ค์ด, ์ ์๋ ์๋ Fluid Swing
์ Propeller Wind
๋ฑ์ ์ด์ฉํ๋ ํ์๋ผ์ธ ํธ๋ฆฌ๊ฑฐ๊ฐ ์์ต๋๋ค.
๋ง์ฝ ์ด ์ด๋ฆ๋ค์ด ๋ฐ๋๊ฑฐ๋ ์ง์์ง๋ค๋ฉด, ํ์๋ผ์ธ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ํ์ง ์๊ฒ ๋ฉ๋๋ค.
ํนํ, ํ๊ตญ์ด ์คํฌ๋ช
์ผ๋ก ๋ฐ๊พธ๋ ๊ฒฝ์ฐ, ํ์๋ผ์ธ ํธ๋ฆฌ๊ฑฐ๋ ์์ด ํ์๋ผ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์
๊ฐ์ ์คํฌ๋ช
์ ํ์ํ๋ค ํ๋๋ผ๋ ํ์๋ผ์ธ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ํ์ง ์์ต๋๋ค.
(ํ์๋ผ์ธ์ ๊ฐ ์ธ์ด๋ง๋ค ๋ฒ์ญ ๊ณผ์ ์ ๊ฑฐ์ณ ํ๋ฉด์ ํ์๋๋ฉฐ, ํ์๋ผ์ธ ํธ๋ฆฌ๊ฑฐ๋ ์์ด ํ์๋ผ์ธ ๊ธฐ๋ฐ์ผ๋ก ์๋ํฉ๋๋ค.)
์ด ๋ฌธ๋จ์ cactbot ๋ชจ๋์ ์ฌ์ฉ์ ์ง์ ํ ์ ์๋ ๋ค๋ฅธ ์์๋ค์ ๋ํด ๋ค๋ฃน๋๋ค. ๋ช๋ช ๋ณ์๋ค์ ์ค์ UI์ ์์ง๋ ์๊ณ ํธ๋ฆฌ๊ฑฐ๋ ์๋ ๊ฒ๋ค์ด ์์ต๋๋ค.
๊ฐ๊ฐ์ cactbot ๋ชจ๋์ ๋ค์ํ ์ต์
์ ์ ์ดํ๋ Options
๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์์ ํ ์ ์๋ ์ต์
์ ๊ฐ ui/<name>/<name>.js
ํ์ผ ์ต์๋จ Options
๋ถ๋ถ์ ๋์ด๋์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ui/raidboss/raidboss.js์๋
PlayerNicks
์ต์
์ ์ฐพ์๋ณผ ์ ์๋๋ฐ, ํ๋ ์ด์ด ๋๋ค์์ ๋ฐ๋ก ์ค์ ํ๋ ์ต์
์ด ์์ต๋๋ค.
Options.PlayerNicks = {
// '์ด๋ฆ ์ฑ': '๋๋ค์',
'Banana Nana': 'Nana',
'The Great\'one': 'Joe', // The Great'one์ ๊ฐ์ด ์ด๋ฆ์ ์์ ๋ฐ์ดํ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๊ทธ ์์ ์ญ์ฌ๋์๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
'Viewing Cutscene': 'Cut',
// ๊ธฐํ ๋ ๋ง์ ๋๋ค์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
};
์ฃผ์: user ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ๋ค์ cactbot ์ค์ UI์์ ์ค์ ํ ๊ฐ๋ค์ ์กฐ์ฉํ ๋ฎ์ด์์ธ ๊ฒ์ ๋๋ค. ์ด ๋ถ๋ถ์ด ํท๊ฐ๋ฆด ์ ์๋๋ฐ, ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ ์ค์ ๊ธฐ๋ฅ์ผ๋ก ์ต๋ํ ์ค์ ํด๋ณด๊ณ , ๊ทธ ์ค์ ๊ธฐ๋ฅ์ผ๋ก๋ ์์ ํ ์ ์๋ ๊ฒ๋ค๋ง user ํ์ผ๋ค๋ก ์์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์ค๋ช ์ด ์ ํ ์ดํด๋์ง ์๋ ๋ถ๋ค์ ์ํด ๊ทธ๋ฅ ๋ฌด์์ ๋ฐ๋ผํ๋ฉด ๋๋ ์ค๋ช ์ ์ถ๊ฐํ์ต๋๋ค. ์ง๊ธ๊น์ง์ ๋ด์ฉ์ ์ดํดํ์ ๋ถ์ด๋ผ๋ฉด ์ฝ์ง ์์๋ ๋ฉ๋๋ค.
User ํด๋์ ์์น๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด, User ๋๋ ํ ๋ฆฌ ์ค์ ํ๊ธฐ๋ฅผ ํ์ธํ์ธ์. ํนํ, ํด๋ฃจ๋ด ์ฌ์ฉ์์ ๊ฒฝ์ฐ User ํด๋ ๊ฒฝ๋ก๋ฅผ ์๋ก ์ง์ ํ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
-
user
ํด๋์raidboss.js
ํ์ผ์ ํธ์ง ํ๋ก๊ทธ๋จ์ผ๋ก ์ฝ๋๋ค. (๋ฉ๋ชจ์ฅ์ผ๋ก๋ ๊ฐ๋ฅํ๋ฉฐ, ์ถ๊ฐ ํ๋ก๊ทธ๋จ์ ์ค์นํ ์ํฅ์ด ์๋ค๋ฉด, notepad++๋ฅผ ์ถ์ฒํฉ๋๋ค.) ํด๋น ํ์ผ์ด ์๋ค๋ฉด, ์๋ก ๋ง๋ญ๋๋ค. ํ์ฅ์๊ฐ js๋ก ์์ฑ๋๋์ง ๋ฐ๋์ ํ์ธํ์ธ์. -
๋ค์ ์ฝ๋ ๋ธ๋ก์
raidboss.js
ํ์ผ ๊ฐ์ฅ ์๋์ ๋ถ์ฌ๋ฃ์ต๋๋ค.Options.Triggers.push({ zoneId: ZoneId.SomeId, triggers: [ { }, ], });
-
๋ฐ์ดํฐ ๋ชฉ๋ก์์ ์ง๊ธ ์์ ํ๊ณ ์ถ์ ๋ ์ด๋๋ ๋์ ์
.js
ํ์ผ์ ์ฐพ์์ ์ฌ์ธ์. ํด๋นํ๋ ๋์ ์ ์๋ฌธ๋ช ์ ์ง์ ์์๋ด์ผ ํฉ๋๋ค. -
raidboss.js
ํ์ผ์ ๋ถ์ฌ๋ฃ์ ๋ด์ฉ ์ค,ZoneId.SomeId
๋ฅผ ์ง์ฐ๊ณ ๊ทธ ์์น์ ๋ฐฉ๊ธ ์ฐพ์์ ์ฐ.js
ํ์ผ์ ๋์์๋zoneId
๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค. ์์)e8s.js
์๋ZoneId.EdensVerseRefulgenceSavage
๊ฐzoneId
๋ก ์ ํ์์ผ๋ฏ๋ก,ZoneId.SomeId
๋ฅผ ์ง์ฐ๊ณZoneId.EdensVerseRefulgenceSavage
๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค. -
trigger ๋ด๋ถ ์ค๊ดํธ์ ์ผํ๋ฅผ ์ง์ฐ๊ณ ,
.js
ํ์ผ ๋ด์์ ์์ ํ๊ธธ ์ํ๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๊ทธ๋๋ก ๋ถ์ฌ๋ฃ์ต๋๋ค. (id ๋ฐ๋ก ์์ ์๋ ์ค๊ดํธ๋ถํฐ ๋ณต์ฌํด์ผ ํฉ๋๋ค.)์ :
triggers: [ { }, ],
ํ:
triggers: [ { // <- id ๋ฐ๋ก ์์ ์ฌ๋ ์ค๊ดํธ๊ฐ ํ๋์ ํธ๋ฆฌ๊ฑฐ์ ์์์ ์ ๋๋ค. id: 'E8S Reflected Frost 1', netRegex: NetRegexes.ability({ source: 'Frozen Mirror', id: '4DB[78]', capture: false }), suppressSeconds: 5, infoText: { en: 'Swap Sides', de: 'Seiten wechseln', fr: 'Changez de cรดtรฉ', cn: 'ๆข่พน', ko: '๋ฐ๋๋ก ์ด๋', }, }, // <- ์์ํ ์ค๊ดํธ์ ๋ซ๋ ์์ด ํ๋์ ํธ๋ฆฌ๊ฑฐ์ ๋์ ์ ๋๋ค. ์ผํ๋ ํฌํจํ๋ค๊ณ ์๊ฐํ๋๊ฒ ๋ณต์กํ์ง ์์ต๋๋ค. ],
-
์์ ํ๊ณ ์ถ์ ๋ถ๋ถ์ ์์ ํฉ๋๋ค. ์๋ ์์์์๋ ํ๊ตญ์ด ์ถ๋ ฅ ๋ฌธ๊ตฌ๋ฅผ "ํผํ๊ธฐ"๋ก ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
triggers: [ { id: 'E8S Reflected Frost 1', netRegex: NetRegexes.ability({ source: 'Frozen Mirror', id: '4DB[78]', capture: false }), suppressSeconds: 5, infoText: { en: 'Swap Sides', de: 'Seiten wechseln', fr: 'Changez de cรดtรฉ', cn: 'ๆข่พน', ko: 'ํผํ๊ธฐ', // <- ์ฌ๊ธฐ๋ฅผ ๋ฐ๊ฟจ์ต๋๋ค. }, }, ],
-
๋ ์์ ํ๊ณ ์ถ์ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ค๋ฉด, ์ด ๊ณผ์ ์ ๋งจ ์ฒ์์ผ๋ก ๋์๊ฐ ๋ฐ๋ณตํฉ๋๋ค.
์ฃผ์: ๊ณผ์ ๋์ค ์ผํ๋ฅผ ์ง์ฐ๊ฑฐ๋ ๊ฐ ๊ดํธ์ ์์ด ์๋ก ๋ง์ง ์๋ ๋ฑ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ฃผ์ํ์ธ์.
ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ ์์ ์์ฌ๋ก ์์ ํ๊ณ ์ถ๋ค๋ฉด, ์ด ๋ฌธ์์ ๋ค๋ฅธ ๋ฌธ๋จ๋ค์ ์ฐธ๊ณ ํ์ธ์. ์ด ๋ฌธ๋จ์ ์ต์ํ์ ์ง์์ผ๋ก ์์ ํ ์ ์๋๋ก ์ต๋ํ ๊ฐ๋จํ ์ค๋ช ํ์ต๋๋ค.
-
user
ํด๋์raidboss.js
ํ์ผ์ ํธ์ง ํ๋ก๊ทธ๋จ์ผ๋ก ์ฝ๋๋ค. (๋ฉ๋ชจ์ฅ์ผ๋ก๋ ๊ฐ๋ฅํ๋ฉฐ, ์ถ๊ฐ ํ๋ก๊ทธ๋จ์ ์ค์นํ ์ํฅ์ด ์๋ค๋ฉด, notepad++๋ฅผ ์ถ์ฒํฉ๋๋ค.) ํด๋น ํ์ผ์ด ์๋ค๋ฉด, ์๋ก ๋ง๋ญ๋๋ค. ํ์ฅ์๊ฐ js๋ก ์์ฑ๋๋์ง ๋ฐ๋์ ํ์ธํ์ธ์. -
์์ ํ๊ณ ์ถ์ ํ์๋ผ์ธ์ ๋ฐ์ดํฐ ๋ชฉ๋ก์์ ๋ค์ด๋ก๋ํ์ธ์.
- ๋ชฉ๋ก์์ ํด๋น ํ์ผ์ ์ฐพ์ต๋๋ค.
Raw
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.- ํ๋ฉด ์ฐํด๋ฆญ ํ,
๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์ฅ
์ ํด๋ฆญํ๋ฉด ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. - ํด๋น ํ์ผ์ User ํด๋ ์์ ๋ฃ์ต๋๋ค.
ํด๋นํ๋ ๋์ ์ ์๋ฌธ๋ช ์ ์ง์ ์์๋ด์ผ ํฉ๋๋ค.
-
๋ค์ ์ฝ๋ ๋ธ๋ก์
raidboss.js
ํ์ผ ๊ฐ์ฅ ์๋์ ๋ถ์ฌ๋ฃ์ต๋๋ค.Options.Triggers.push({ zoneId: ZoneId.SomeId, overrideTimelineFile: true, timelineFile: 'some_timeline.txt', });
-
์์ ํ๊ณ ์ถ์ ํ์๋ผ์ธ์ ๋์ ์ ํด๋นํ๋
.js
ํ์ผ์ ๋ฐ์ดํฐ ๋ชฉ๋ก์์ ์ด๊ณ , ๊ทธ ํ์ผ ์๋จ์ ์๋zoneId
๊ฐ์ZoneId.SomeId
๋์ ์ง์ด ๋ฃ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์๋ ํ์๋ผ์ธ์ ์์ ํ๊ณ ์๋ค๋ฉด,the_epic_of_alexander.js
์ ์ด์ด์ ๊ทธ ๊ณณ์ ์ ํZoneId.TheEpicOfAlexanderUltimate
๋ฅผZoneId.SomeId
๋ฅผ ๋์ ํด ๋ถ์ฌ๋ฃ์ต๋๋ค. -
timelineFile
๋ค์txt
ํ์ผ๋ช ์ ๋ฐฉ๊ธ ๋ค์ด๋ก๋ํ ํ์๋ผ์ธtxt
ํ์ผ๋ช ์ผ๋ก ์์ ํฉ๋๋ค. -
๋ค์ด๋ก๋ ํ ํ์๋ผ์ธ์ ํธ์ง๊ธฐ๋ก ์ด์ด ์ํ๋ ๋๋ก ์์ ํฉ๋๋ค.
-
๋ ์์ ํ๊ณ ์ถ์ ํ์๋ผ์ธ์ด ์๋ค๋ฉด, ์ด ๊ณผ์ ์ ๋งจ ์ฒ์์ผ๋ก ๋์๊ฐ ๋ฐ๋ณตํฉ๋๋ค.
์ํฐ๋ฅผ ์
๋ ฅํด๋ ๋ฑํ ๊ธฐ๋ฅ์ ์์ผ๋ฏ๋ก ์ํฐ๋ ๋ง์๊ป ํด๋ ๋ฉ๋๋ค.(์ด์ด์ ธ์ผ ํ๋ ๋ฌธ๊ตฌ ๋์ค์ ์ค๋ฐ๊ฟ์ ํด๋ ๋๋ค๋ ๋ป์ด ์๋๋๋ค.) js
ํ์ผ ๋ด์ "//"๋ฅผ ์
๋ ฅํ๋ฉด, ๋ค์ ๋ชจ๋ ๊ธ์๋ ๋ชจ๋ ๋ฌด์๋ฉ๋๋ค. (์ค๋ฐ๊ฟ์ ๋ฌด์ํ์ง ์์.) ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
Options.Triggers.push({
zoneId: ZoneId.EdensVerseRefulgenceSavage,
// ๋ค์ ์ด๋ค ๋ด์ฉ์ ์์ ํ๊ฑด์ง ์ ์ ์ ์๊ฒ ์ฃ
// ์ด๋ ๊ฒ ๋ฉ๋ชจ๋ฅผ ์ค๋ฐ๊ฟํ๋ฉด ์๋ก //๋ฅผ ์
๋ ฅํด์ผ ํฉ๋๋ค.
triggers: [
{
id: 'E8S Reflected Frost 1', // ์ด๋ ๊ฒ ์ด๋ ๋ฌธ์ฅ ๋ค์๋ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
netRegex: NetRegexes.ability({ source: 'Frozen Mirror', id: '4DB[78]', capture: false }),
suppressSeconds: 5,
infoText: {
en: 'Swap Sides',
de: 'Seiten wechseln',
fr: 'Changez de cรดtรฉ',
cn: 'ๆข่พน',
ko: 'ํผํ๊ธฐ',
},
},
],
});
์ ์ ํ์ผ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก eval
๋ฉ๋๋ค,
๋ฐ๋ผ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ ํธ๋ฆฌ๊ฑฐ ํ์ผ๋ค๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก import
ํ ์ ์์ต๋๋ค.
์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ค์ ๋ค์ global๋ค์ ์ ๊ทผํ ์ ์์ต๋๋ค:
์ค๋ฒ๋ ์ด ํ๋ฌ๊ทธ์ธ ๋ก๊ทธ๋ ์คํฌ๋กค ๊ธฐ๋ฅ์ด ์๋ ํ ์คํธ ์ฐฝ์ธ๋ฐ, ACT -> Plugins -> OverlayPlugin.dll๋ก ์ด๋ํด์ ์ฐฝ์ ํ๋จ์ ๋ณด๋ฉด ์ฐพ์ ์ ์์ต๋๋ค.
๋ง์ฝ ์๋ฌ๊ฐ ์๋ค๋ฉด, ์ฌ๊ธฐ์ ๋์ฌ ๊ฒ๋๋ค.
๋จผ์ , raidboss์ ๋๋ฒ๊ทธ ๋ชจ๋๋ฅผ ํ์ฑํํ์ธ์.
cactbot ์ค์ UI์์,
๊ฐ๋ฐ์ ์ต์
ํ์
๋ฅผ ์ฒดํฌํ๊ณ ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์นจ ํ์ธ์.
๋ค์, Raidboss ์๋์ ์๋ ๋๋ฒ๊ทธ ๋ชจ๋ ํ์ฑํ
๋ฅผ ์ฒดํฌํ๊ณ ๋ค์ ์๋ก ๊ณ ์นจ ํ์ธ์.
Raidboss ๋๋ฒ๊ทธ ๋ชจ๋๊ฐ ํ์ฑํ๋์ด ์์ผ๋ฉด,
์ค๋ฒ๋ ์ด ํ๋ฌ๊ทธ์ธ ๋ก๊ทธ์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๋ถ๋ฌ์ค๋ ๊ฐ๊ฐ์ user ํ์ผ ๋ฆฌ์คํธ๋ ์ถ๋ ฅํฉ๋๋ค:
[10/19/2020 6:18:27 PM] Info: raidbossy: BrowserConsole: local user file: C:\Users\tinipoutini\cactbot\user\raidboss.js
User ํ์ผ์ด ๋ก๋๋์๋์ง ํ์ธํ์ธ์.
User ํ์ผ์ JavaScript๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ JavaScript ๋ฌธ๋ฒ์ ๋ง์ง ์๊ฒ ์์ฑํ๋ฉด, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ด๊ณ user ํ์ผ์ ์๋ต๋์ด ๋ถ๋ฌ์ค์ง ์์ต๋๋ค. ๋ก๋ฉํ ๋ ์๋ฌ๊ฐ ์๋์ง OverlayPlugin ๋ก๊ทธ๋ฅผ ํ์ธํ์ธ์.
์์:
[10/19/2020 6:18:27 PM] Info: raidbossy: BrowserConsole: local user file: C:\Users\tinipoutini\cactbot\user\raidboss.js (Source: file:///C:/Users/tinipoutini/cactbot/resources/user_config.ts, Line: 83)
[10/19/2020 6:18:27 PM] Info: raidbossy: BrowserConsole: *** ERROR IN USER FILE *** (Source: file:///C:/Users/tinipoutini/cactbot/resources/user_config.ts, Line: 95)
[10/19/2020 6:18:27 PM] Info: raidbossy: BrowserConsole: SyntaxError: Unexpected token :
at loadUser (file:///C:/Users/tinipoutini/cactbot/resources/user_config.ts:92:28) (Source: file:///C:/Users/tinipoutini/cactbot/resources/user_config.ts, Line: 96)