Casting - noonmaru/psychics GitHub Wiki

๊ฐœ์š”

๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํˆฌ์‚ฌ์ฒด๋ฅผ ๋ฐœ์‚ฌํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ์•„์ดํ…œ์€ AbilityConcept.wand ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ: Default properties

์˜ˆ์ œ

Ability ํด๋ž˜์Šค์— com.github.noonmaru.psychics.Ability๊ฐ€ ์•„๋‹Œ com.github.noonmaru.psychics.ActiveAbility๋ฅผ ์ƒ์†ํ•˜์„ธ์š”.

์ƒ์† ํ›„์— onCast(target: Any?) ํ•จ์ˆ˜๋„ override ํ•˜์„ธ์š”.

import com.github.noonmaru.psychics.AbilityConcept
import com.github.noonmaru.psychics.ActiveAbility

class MyAbility : ActiveAbility<AbilityConcept>() {
    override fun onCast(event: PlayerEvent, action: WandAction, target: Any?) {
        // ๋Šฅ๋ ฅ ๋ฐœ๋™ ์ฝ”๋“œ
    }
}

onCast ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •๋œ ์•„์ดํ…œ์„ ํด๋ฆญ(์ขŒ, ์šฐ ํฌํ•จ)ํ• ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ถœํ•˜๊ธฐ ์ด์ „์— test ํ•จ์ˆ˜๋กœ ๋ฐœ๋™ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

TestResult.SUCCESS๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์„๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  onCast ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฑ„๋„๋ง

์‚ฌ์šฉ์ž๊ฐ€ ์•„์ดํ…œ์„ ํด๋ฆญํ•˜๊ณ  ์ผ์ •์‹œ๊ฐ„ ๋’ค์— onCast ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต ์‹œ์ „์‹œ๊ฐ„, ์ง‘์ค‘์‹œ๊ฐ„ ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

AbilityConcept.castingTicks ์†์„ฑ์„ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

myfirstability.yml

display-name: myfirstpsychic
health-bonus: 0.0
health-regen-per-tick: 0.0
mana: 0.0
mana-regen-per-tick: 0.0
mana-color: BLUE
description: []

abilities:
  myfirstability:
    ability: .myability
    common:
      display-name: myability
      type: PASSIVE
      casting-ticks: 50
      interruptible: false
      supply-items: []
      description: []

๊ด€๋ จ ํ•จ์ˆ˜

  • onChannel = ์‹œ์ „ํ›„ onCast ํ˜ธ์ถœ ์ „๊นŒ์ง€ 1 tick๋งˆ๋‹ค ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • onInterrupt = ์‹œ์ „๋„์ค‘ ๊ฐ•์ œ๋กœ ์ทจ์†Œ๋˜์—ˆ์„๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

Targeter

targeter ๋Š” ActiveAbility ์—์„œ ์‹œ์ „์‹œ๊ฐ„ ์ด์ „์— ๋ชฉํ‘œ๋ฅผ ์ง€์ •ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต ์‹œ์ „์‹œ๊ฐ„์„ ์„ค์ •ํ•˜์—ฌ ๋ชฉํ‘œ์˜ ์ •ํ™•๋„๋ฅผ ๋‚ฎ์ถ”๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๋œ ์ธ์Šคํ„ด์Šค๋Š” onCast ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ๋•Œ target ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ •์˜ํ•˜์ง€ ์•Š์„๊ฒฝ์šฐ null์ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

class MyAbility : ActiveAbility<AbilityConcept>() {
    init {
        targeter = {
            esper.player.eyeLocation // ์‹œ์ „์‹œ ์‚ฌ์šฉ์ž์˜ ๋จธ๋ฆฌ ์ขŒํ‘œ
        }
    }

    override fun onCast(event: PlayerEvent, action: WandAction, target: Any?) {
         // target = targeterํ†ตํ•ด ์–ป์–ด์˜จ Location
    }
}