[녹픽던 모딩] attackProc, defenseProc, damage
attackproc, defenseProc
물리 공격 (근접 공격, 투척 무기) 적중(피격)시 발생 효과 완드 등으로 발동하는 마법 피해에선 작동하지 않음.
다음 스크립트들에 적용할 수 있음.
[Hero] - 영웅이 공격(피격)할 때마다 발동시킬 수 있음. if문을 사용하면 [특정 버프] 상태일 때 등의 조건을 줄 수 있음.
주로 플레이어에게 한정된 버프 효과등을 구현할 때 사용함.
─ attackProc관련
// Hex(주술) 버프가 null이 아니라면 (즉, 주술 버프가 있다면 발동)
if (buff(Hex.class) != null) {
damage *= 1.5f;
}
단, 특정 무기를 장착한 후 attackProc 발동 효과는 Hero에서 발동시키는 것은 비효율적.
이 경우는 해당 무기에서 구현하는 것이 옳음.
if (belongings.weapon instanceof 대충 무기) { 대충 효과; }
... 이러한 형식을 Hero의 attackProc에 사용할 바엔 해당 무기의 proc에 구현하라는 것.
─ defenseProc관련
defenseProc의 경우 무기에서 적용할 수 없기에, 관련 효과를 주고싶다면 hero의 defenseProc에 작성하는 것이 맞음.
// 이걸 defensProc에 넣으면, 특정 무기 장착시 적의 물리 공격을 20%감소시켜 받는다.
if (belongings.weapon instanceof 대충 무기) { damage *= 0.8f; }
[Mob] - 몬스터가 공격할 때마다 발동. 몬스터에게 한정된 효과 등 구현. (타락 같은 게 대표적인 예.)
[Actor] - 모든 캐릭터가 공격할 때마다 발동. 플레이어, 몬스터에게 동일하게 적용된 효과 구현.
(취약, 약화, 주술 등 플레이어와 몬스터 구분없이 동일한 효과를 내는 상태이상 등을 구현할 때 사용)
대충 요약하면
Actor - 영웅, 몬스터, NPC 전부
Hero - 영웅(=플레이어)
Mob - 영웅이 아닌 대상 (NPC 제외)
... 을 대상으로 한다.
[Weapon 계열] - 해당 무기가 적중할 때 발동. Hero와 무기를 든 석상, 거울상 등에서 발동함.
damage
모든 종류의 피해가 발생 처리.
특정 버프가 있다면 2배로 받는다던가, 그런 식으로 가능하지만... 상태이상(연소) 등도 포함된 다는 것에 주의.
if (src instanceof Wand) {
...대충 효과 }
이런 식으로 damage에서 발동 조건을 한정시킬 수 있다.
src는 공격자 판별용 Object 변수로, 이 경우에는 해당 캐릭터가 Wand로 피해를 받았을 때 효과가 발동한다.
Wand는 완드 계열의 부모 클래스이기에, 붕괴나 화염 폭발 등 DamageWand를 포함한 모든 Wand가 효과 범위에 들어간다.
─ 예시
attackProc (Hero, Mob, Actor)
@Override
public int attackProc(final Char enemy, int damage) {
damage = super.attackProc(enemy, damage);
...
if (buff(Hex.class) != null) damage *= 1.25f;
...
}
Hex 라는 버프가 있다면 입히는 물리 피해가 1.25배로 합니다.(=입히는 피해 1.25배)
defenseProc (Hero, Mob, Actor)
@Override
public int defenseProc(Char enemy, int damage) {
...
if (buff(IAMSTRONG.class) != null) damage = 1;
...
}
IAMSTRONG 라는 버프가 있다면 모든 물리 피해를 1만 받습니다.
단, 이후 작성하는 코드에 따라선 1 이상이 될 수도 있습니다.
damage (Hero, Mob, Actor)
@Override
public void damage(int dmg, Object src) {
...
if (src instanceof Hero) dmg = 999;
}
피해를 입힌 대상이 Hero 라면 최종 피해량이 999가 됩니다.
proc (Weapon)
이름은 다르지만, attackProc와 동일한 효과.
무기를 장착할 수 있는 캐릭터가 공격할 때, 해당 캐릭터의 attackProc에서 작동시키는 방식으로 돌아감.
@Override
public int proc(Char attacker, Char defender, int damage) {
if (attacker instanceof Hero) damage *= 1.5f;
return super.proc(attacker, defender, damage);
}
공격자가 Hero라면 데미지를 1.5배로 합니다.
거울상, 석상 등 Hero가 아닌 대상은 이 무기를 장착한 상태라도 피해량이 1.5배로 증가하지 않습니다.