Skip to content

Latest commit

ย 

History

History
584 lines (455 loc) ยท 28.4 KB

CactbotCustomization.md

File metadata and controls

584 lines (455 loc) ยท 28.4 KB

Cactbot ์‚ฌ์šฉ์ž ์„ค์ •

๐ŸŒŽ [English] [็ฎ€ไฝ“ไธญๆ–‡] [็น้ซ”ไธญๆ–‡] [ํ•œ๊ตญ์–ด]

cactbot UI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

cactbot์„ ์‚ฌ์šฉ์ž ์„ค์ •ํ•˜์‹ค ๋•Œ cactbot์˜ ์„ค์ • UI๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ACT -> Plugins -> OverlayPlugin.dll -> Cactbot ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

  • ํŠธ๋ฆฌ๊ฑฐ์— TTS ์„ค์ •ํ•˜๊ธฐ
  • ํŠธ๋ฆฌ๊ฑฐ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ
  • cactbot ์–ธ์–ด ๋ณ€๊ฒฝํ•˜๊ธฐ
  • ๋ณผ๋ฅจ ์„ค์ •
  • ์Œ์‹์„ ๋จน์œผ๋ผ๋Š” ์น˜์ฆˆ ์•„์ด์ฝ˜ ์—†์• ๊ธฐ

cactbot ์„ค์ • UI์—์„œ ์›ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์„ ์„ค์ •ํ•  ์ˆ˜๋Š” ์—†์„์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ•์ด ์„ค์ •ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•จ์— ๋”ฐ๋ผ ๋” ๋งŽ์€ ์˜ต์…˜์ด ์ถ”๊ฐ€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์˜ต์…˜๋“ค์€ %APPDATA%\Advanced Combat Tracker\Config\RainbowMage.OverlayPlugin.config.json ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ € ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์„ธ์š”.

cactbot UI๋กœ ํŠธ๋ฆฌ๊ฑฐ ๋ฌธ์ž์—ด ์ˆ˜์ •ํ•˜๊ธฐ

ACT -> Plugins -> OverlayPlugin.dll -> Cactbot -> Raidboss์— ์žˆ๋Š” cactbot ์„ค์ • UI์—๋Š” ๊ฐœ๋ณ„์ ์ธ ํŠธ๋ฆฌ๊ฑฐ ๋ชฉ๋ก์ด ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชฉ๋ก ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ด์„œ ํŠธ๋ฆฌ๊ฑฐ๋ณ„๋กœ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ์•ž์— ์ข… ๋ชจ์–‘(๐Ÿ””)์ด ์žˆ๋Š” ์„ค์ •๊ฐ’์€ ํŠธ๋ฆฌ๊ฑฐ์—์„œ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์‹œ์ง€์ด๋ฉฐ, ์ด ์„ค์ •๋ž€์„ ์ด์šฉํ•ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "${player}" ํƒฑ๋ฒ„๋ผ๋Š” ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” ๐Ÿ””onTarget ์ž…๋ ฅ๋ž€์ด ์žˆ๋‹ค๊ณ  ์นฉ์‹œ๋‹ค. ์ด๊ฒƒ์ด ์–ด๋–ค ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ํƒฑํฌ ๋ฒ„์Šคํ„ฐ๊ฐ€ ์˜ค๊ณ  ์žˆ์„ ๋•Œ ํ™”๋ฉด์—(๋˜๋Š” TTS๋กœ) ์ถœ๋ ฅํ•  ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ${player}๋Š” ํŠธ๋ฆฌ๊ฑฐ์— ์˜ํ•ด ๋™์ ์œผ๋กœ ์„ค์ •๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ${๋ณ€์ˆ˜๋ช…} ๊ฐ™์€ ๋ชจ์Šต์˜ ๋ฌธ์ž์—ด์€ ๊ทธ๋Ÿฐ ๋™์  ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

์›๋ž˜ ์ถœ๋ ฅ ๋ฌธ์ž์—ด ๋Œ€์‹  ${player}๊ฐ€ ์ฃฝ์œผ๋ ค๊ณ  ํ•ด์š”!๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒ ์ฃ . ์•„๋‹ˆ๋ฉด, ๋ˆ„๊ฐ€ ๋งž์„์ง€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํƒฑ๋ฒ„๋กœ ์งง๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฎ์–ด์“ด ๊ฒƒ์„ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ทธ๋ƒฅ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๋ฅผ ๋น„์šฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฎ์–ด์“ฐ๊ธฐ ๊ธฐ๋Šฅ์—๋Š” ์•ฝ๊ฐ„์˜ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ ์ž‘๋™ ๋…ผ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†์–ด์š”. ๋˜, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— alarmText์™€ ๋‹ค๋ฅธ TTS๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ํ•  ์ˆ˜ ์—†์–ด์š”. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋Ÿฐ ์‹์˜ ๋” ๋ณต์žกํ•œ ์ˆ˜์ •์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, Raidboss ํŠธ๋ฆฌ๊ฑฐ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฌธ๋‹จ์„ ํ™•์ธํ•˜์„ธ์š”.

User ๋””๋ ‰ํ† ๋ฆฌ ๊ฐœ์š”

๋งŒ์•ฝ 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 ์˜ค๋ฒ„๋ ˆ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ • ์ฐฝ์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ฒ„๋ ˆ์ด์˜ "์ƒˆ๋กœ๊ณ ์นจ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

User ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •ํ•˜๊ธฐ

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๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ์Šค์Šค๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Raidboss ํŠธ๋ฆฌ๊ฑฐ ๋ฎ์–ด์“ฐ๊ธฐ

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 ์ฝ”๋“œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋”๋”์šฑ ์กฐ์‹ฌํ•˜์„ธ์š”.

์˜ˆ์‹œ 1: ์ถœ๋ ฅ ๋ฌธ์ž์—ด ๋ณ€๊ฒฝํ•˜๊ธฐ

๋‹น์‹ ์ด ์ ˆ๋ฐ”ํ•˜๋ฅผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ์นฉ์‹œ๋‹ค. ๋‹น์‹ ์˜ ๊ณต๋Œ€๋Š” ์ฒ˜์Œ ๋ถˆ์žฅํŒ๋•Œ 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 ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๊ณ  ํ•œ๊ตญ์–ด ์ด์™ธ์— ๋‹ค๋ฅธ ์–ธ์–ด๋„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ 2: ๋„๋ฐœ ์•Œ๋ฆผ์ด ๋ชจ๋“  ์ง์—…์— ๋œจ๊ฒŒ ํ•˜๊ธฐ

์ง€๊ธˆ์€ ๋„๋ฐœ ์•Œ๋ฆผ์ด ๊ฐ™์€ ํŒŒํ‹ฐ๋‚˜ ์—ฐํ•ฉ ํŒŒํ‹ฐ์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•˜๊ณ , ์ผ๋ถ€ ์ง์—…์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ๋Š” ์–ด๋–ป๊ฒŒ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด์— ๋Œ€ํ•ด ์•Œ๋ฆผ์„ ๋ณด์—ฌ์ฃผ๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋„๋ฐœ ํŠธ๋ฆฌ๊ฑฐ๋Š” 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์ด ์—†๋Š” ํŠธ๋ฆฌ๊ฑฐ๋Š” ์ •๊ทœ์‹์ด ๋งž์„ ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์˜ˆ์‹œ 3: ์ปค์Šคํ…€ ํŠธ๋ฆฌ๊ฑฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

์ด์™€ ๋˜‘๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ปค์Šคํ…€ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ๋Š” "๊ฐˆ๋ž˜ ๋ฒˆ๊ฐœ" ๋””๋ฒ„ํ”„๋ฅผ ๋ฐ›์€ 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 ํƒ€์ž„๋ผ์ธ์„ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์€ Raidboss ํŠธ๋ฆฌ๊ฑฐ ๋ฎ์–ด์“ฐ๊ธฐ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž„๋ผ์ธ์„ ๋ฎ์–ด์“ฐ๊ธฐ ์œ„ํ•œ ๊ณผ์ •:

  1. ํƒ€์ž„๋ผ์ธ ํ…์ŠคํŠธ ํŒŒ์ผ์„ cactbot์—์„œ user ํด๋”๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ui/raidboss/data/05-shb/ultimate/the_epic_of_alexander.txt๋ฅผ user/the_epic_of_alexander.txt๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ .

  2. 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์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋œ ํƒ€์ž„๋ผ์ธ ๋Œ€์‹  ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ํƒ€์ž„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  3. ํ•„์š”ํ•œ ๋งŒํผ 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 ํด๋” ๊ฒฝ๋กœ๋ฅผ ์ƒˆ๋กœ ์ง€์ •ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Raidboss ํŠธ๋ฆฌ๊ฑฐ ์ˆ˜์ •ํ•˜๊ธฐ

  1. user ํด๋”์˜ raidboss.js ํŒŒ์ผ์„ ํŽธ์ง‘ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์—ฝ๋‹ˆ๋‹ค. (๋ฉ”๋ชจ์žฅ์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ถ”๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•  ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด, notepad++๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.) ํ•ด๋‹น ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด, ์ƒˆ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ™•์žฅ์ž๊ฐ€ js๋กœ ์ƒ์„ฑ๋๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์„ธ์š”.

  2. ๋‹ค์Œ ์ฝ”๋“œ ๋ธ”๋ก์„ raidboss.js ํŒŒ์ผ ๊ฐ€์žฅ ์•„๋ž˜์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

    Options.Triggers.push({
      zoneId: ZoneId.SomeId,
      triggers: [
        {
    
        },
      ],
    });
  3. ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์—์„œ ์ง€๊ธˆ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๋ ˆ์ด๋“œ๋‚˜ ๋˜์ „์˜ .js ํŒŒ์ผ์„ ์ฐพ์•„์„œ ์—ฌ์„ธ์š”. ํ•ด๋‹นํ•˜๋Š” ๋˜์ „์˜ ์˜๋ฌธ๋ช…์€ ์ง์ ‘ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  4. raidboss.js ํŒŒ์ผ์— ๋ถ™์—ฌ๋„ฃ์€ ๋‚ด์šฉ ์ค‘, ZoneId.SomeId๋ฅผ ์ง€์šฐ๊ณ  ๊ทธ ์œ„์น˜์— ๋ฐฉ๊ธˆ ์ฐพ์•„์„œ ์—ฐ .js ํŒŒ์ผ์— ๋‚˜์™€์žˆ๋Š” zoneId๋ฅผ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ) e8s.js์—๋Š” ZoneId.EdensVerseRefulgenceSavage๊ฐ€ zoneId๋กœ ์ ํ˜€์žˆ์œผ๋ฏ€๋กœ, ZoneId.SomeId๋ฅผ ์ง€์šฐ๊ณ  ZoneId.EdensVerseRefulgenceSavage๋ฅผ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

  5. 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: '๋ฐ˜๋Œ€๋กœ ์ด๋™',
        },
      }, // <- ์‹œ์ž‘ํ•œ ์ค‘๊ด„ํ˜ธ์˜ ๋‹ซ๋Š” ์Œ์ด ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ๊ฑฐ์˜ ๋์ ์ž…๋‹ˆ๋‹ค. ์‰ผํ‘œ๋„ ํฌํ•จํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๊ฒŒ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ],
  6. ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” ํ•œ๊ตญ์–ด ์ถœ๋ ฅ ๋ฌธ๊ตฌ๋ฅผ "ํ”ผํ•˜๊ธฐ"๋กœ ๋ฐ”๊ฟ”๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    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: 'ํ”ผํ•˜๊ธฐ', // <- ์—ฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
        },
      },
    ],
  7. ๋” ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ๊ณผ์ •์˜ ๋งจ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜: ๊ณผ์ • ๋„์ค‘ ์‰ผํ‘œ๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜ ๊ฐ ๊ด„ํ˜ธ์˜ ์Œ์ด ์„œ๋กœ ๋งž์ง€ ์•Š๋Š” ๋“ฑ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”.

ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋” ์ž์œ ์ž์žฌ๋กœ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ์˜ ๋‹ค๋ฅธ ๋ฌธ๋‹จ๋“ค์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ์ด ๋ฌธ๋‹จ์€ ์ตœ์†Œํ•œ์˜ ์ง€์‹์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

Raidboss ํƒ€์ž„๋ผ์ธ ์ˆ˜์ •ํ•˜๊ธฐ

  1. user ํด๋”์˜ raidboss.js ํŒŒ์ผ์„ ํŽธ์ง‘ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์—ฝ๋‹ˆ๋‹ค. (๋ฉ”๋ชจ์žฅ์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ถ”๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•  ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด, notepad++๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.) ํ•ด๋‹น ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด, ์ƒˆ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ™•์žฅ์ž๊ฐ€ js๋กœ ์ƒ์„ฑ๋๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์„ธ์š”.

  2. ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ํƒ€์ž„๋ผ์ธ์„ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”.

    1. ๋ชฉ๋ก์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
    2. Raw ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. ํ™”๋ฉด ์šฐํด๋ฆญ ํ›„, ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ์„ ํด๋ฆญํ•˜๋ฉด ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    4. ํ•ด๋‹น ํŒŒ์ผ์„ User ํด๋” ์•ˆ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

    ํ•ด๋‹นํ•˜๋Š” ๋˜์ „์˜ ์˜๋ฌธ๋ช…์€ ์ง์ ‘ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ ์ฝ”๋“œ ๋ธ”๋ก์„ raidboss.js ํŒŒ์ผ ๊ฐ€์žฅ ์•„๋ž˜์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

    Options.Triggers.push({
      zoneId: ZoneId.SomeId,
      overrideTimelineFile: true,
      timelineFile: 'some_timeline.txt',
    });
  4. ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ํƒ€์ž„๋ผ์ธ์˜ ๋˜์ „์— ํ•ด๋‹นํ•˜๋Š” .js ํŒŒ์ผ์„ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์—์„œ ์—ด๊ณ , ๊ทธ ํŒŒ์ผ ์ƒ๋‹จ์— ์žˆ๋Š” zoneId ๊ฐ’์„ ZoneId.SomeId ๋Œ€์‹  ์ง‘์–ด ๋„ฃ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ ˆ์•Œ๋ ‰ ํƒ€์ž„๋ผ์ธ์„ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, the_epic_of_alexander.js์„ ์—ด์–ด์„œ ๊ทธ ๊ณณ์— ์ ํžŒ ZoneId.TheEpicOfAlexanderUltimate๋ฅผ ZoneId.SomeId๋ฅผ ๋Œ€์‹ ํ•ด ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

  5. timelineFile ๋’ค์˜ txt ํŒŒ์ผ๋ช…์„ ๋ฐฉ๊ธˆ ๋‹ค์šด๋กœ๋“œํ•œ ํƒ€์ž„๋ผ์ธ txt ํŒŒ์ผ๋ช…์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  6. ๋‹ค์šด๋กœ๋“œ ํ•œ ํƒ€์ž„๋ผ์ธ์„ ํŽธ์ง‘๊ธฐ๋กœ ์—ด์–ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  7. ๋” ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ํƒ€์ž„๋ผ์ธ์ด ์žˆ๋‹ค๋ฉด, ์ด ๊ณผ์ •์˜ ๋งจ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ๋ฉ”๋ชจ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ•

์—”ํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด๋„ ๋”ฑํžˆ ๊ธฐ๋Šฅ์€ ์—†์œผ๋ฏ€๋กœ ์—”ํ„ฐ๋Š” ๋งˆ์Œ๊ป ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.(์ด์–ด์ ธ์•ผ ํ•˜๋Š” ๋ฌธ๊ตฌ ๋„์ค‘์— ์ค„๋ฐ”๊ฟˆ์„ ํ•ด๋„ ๋œ๋‹ค๋Š” ๋œป์ด ์•„๋‹™๋‹ˆ๋‹ค.) 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: 'ํ”ผํ•˜๊ธฐ',
      },
    },
  ],
});

Global ํŠธ๋ฆฌ๊ฑฐ ํŒŒ์ผ Import

์œ ์ € ํŒŒ์ผ๋“ค์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ eval ๋ฉ๋‹ˆ๋‹ค, ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํŠธ๋ฆฌ๊ฑฐ ํŒŒ์ผ๋“ค๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ import ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์œ ์ € ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋“ค์€ ๋‹ค์Œ global๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

User ํŒŒ์ผ ๋””๋ฒ„๊น…

์˜ค๋ฒ„๋ ˆ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๊ทธ์— ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”

์˜ค๋ฒ„๋ ˆ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๊ทธ๋Š” ์Šคํฌ๋กค ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํ…์ŠคํŠธ ์ฐฝ์ธ๋ฐ, ACT -> Plugins -> OverlayPlugin.dll๋กœ ์ด๋™ํ•ด์„œ ์ฐฝ์˜ ํ•˜๋‹จ์„ ๋ณด๋ฉด ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์—ฌ๊ธฐ์— ๋‚˜์˜ฌ ๊ฒ๋‹ˆ๋‹ค.

User ํŒŒ์ผ์ด ๋กœ๋“œ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”

๋จผ์ €, 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 ํŒŒ์ผ์— ์—๋Ÿฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”

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)