시리즈 지원 옵션 최고 효율 연구



대다수의 사람들은 공증, 크강, 스가를 택하며
이 중에 굳이 1등을 뽑자면 스가를 선택했음

과연 무엇이 정답이었을까?


5마리안은 5캐시아나 5수성과 다르게 스킬 대미지가 사격에 의해 적용되는 메커니즘이 아니기 때문에 

발당 (사격+스킬)대미지의 최댓값을 내는 지원 옵션의 황금비율은 의미가 없고,

스킬을 쓰는 타이밍과 사격을 하는 타이밍등을 고려한 DPS (Damage Per Second)의 최댓값을 내는 

지원 옵션의 황금비율을 구해야함.


5마리안은 조준 사격으로 약점을 맞춘 후 빠르게 E스킬을 맞추면 특이하게도 스킬 주제에 크리티컬과 같은 대미지 증가율을 보이며, 쉴드가 있는 적을 타격하면 2배의 대미지를 가하는 데다가 심지어 사격/비조준 사격 대미지 증가 버프의 영향을 받음.

즉, E스킬도 사격 대미지와 똑같은 비율로 크강의 영향을 받음

싱크로율 인덱스를 늘릴 경우 '적 방어력 계수'가 증가하여 모든 대미지가 늘어남.


따라서 공격력 증가(%), 크리티컬 강도(%), 싱크로율 인덱스 모두 사격/스킬 대미지에 영향을 미침.


스킬 가속은 스킬을 자주 쓸 수 있게 도와주고 따라서 단위 시간 동안 대미지를 넣는 횟수가 늘어남.

일반 에너지 회복은 스킬 사용에 필요한 에너지 회복 속도를 늘려주는데, 스킬 가속이 0인 5마리안 기준으로는 스킬 쿨타임4초, 에너지 소모량 4라서 전~혀 필요가 없음. 하지만 스킬 가속이 극단적으로 높고 장기전으로 간다면 필요할지도 모름


아무튼 여러 조건하에 DPS에 중점을 둬서 지원작은 뭐가 정답이었는지를 추론해볼거임

하...X발...개어렵다


조건1. 풀돌/풀재

대미지 계산 공식에 의하면 자신의 현재 스팩이 어느정도냐에 따라 어떤 버프(스탯)을 늘리는게 가장 효율적인지가 그때그때 다름

따라서 모든 스팩이 만렙인 경우에 대해 다룰 것임


조건2. 5마리안 단일(서폿 없을 때)

아까 조건1에서 설명한 내용과 마찬가지임. 어느 종류의 서폿이 붙어있느냐에 또 달라짐


조건3. 무조건 크리티컬 발동

솔직히... 저격총인데 약점 안 쏠거면 쓰면 안됌

그리고 E스킬 - 비조준 사격 대미지 둘 다 크리티컬로 들어감


조건4. 달마 소대 사용

5마리안은 달마 소대를 써야지


조건5. 시뮬레이션(보스전)에서 기용

5마리안 풀돌 효과에 적 처치시 탄약 +1 이 효과를 고려 안하고 싶었음


조건6. 회피기 사용, 보스한테 피격 당한 후 넉백 등 잡것들 무시

이런거까지 고려하기엔 계산이 너무 복잡해짐. (스킬/사격 타이밍 등이 꼬이기 때문)

최대로 낼 수 있는 DPS만 따지자

만약 회피기 사용 등을 고려한다면 스킬 가속 옵션의 효율이 떨어짐


조건7. 특수 스킬 고려 안함



5마리안의 특수 스킬 대미지는 일반적으로 E스킬 이후 '비 조준 사격 대미지'보다도 작음.
당연히 시전시간까지 고려해보면 DPS에 별 차이가 나지 않음. 하지만 공격력 증가(%)지원 옵션을 적용한 DPS에 대해서는 다른 지원 옵션을 적용한 DPS대비 매우 미세한 증가율을 기대할 수 있음
-> 공격력 증가(%)가 조금이나마 효율이 높음

물론 특수 스킬이 대미지만 있는 게 아니라 사용 시 탄창을 즉시 재장전하고, 10초간 적의 방어력 20%무시하는 버프를 적용하지만

탄창 재장전을 고려해서 최적의 타이밍에 특수 스킬을 쓴다 해도 DPS는 변할지언정 황금비율에 미치는 영향력은 미미함

'적 방어력 계수'는 사격/스킬 대미지 모두 동일한 공통 계수이므로 특수 스킬 사용 이후의 모든 종류의 대미지를 일정 비율 높여줌

-> 싱크로율 인덱스의 효율만 떨어짐


그럴싸 하지만 사실은 핑계다

사실 후술하겠지만, 고려를 안해도 되는 진짜 이유가 따로 있음



시작하기에 앞서, 본인은 5마리안이 없고

인 게임 내 도감과, 유튜브 영상들을 참고하였음

그래서 풀재/풀돌시의 공격력(기초값, 백분율)을 일단 계산은 했는데 틀릴 수도 있음 양해바람

지원 소대의 경우 만렙이긴한데 우선 1,2옵션이 아예 없다고 생각하고

3옵션은 다 KP 유형 대미지 8.5%(만렙)으로 맞췄다고 생각하자



사격대미지 계산

참고: https://arca.live/b/projectsnow/100781946


조준 사격으로 약점을 공격했을 때의 대미지계산


공격력(기초값): 어느 분이 제보한 기초값 2460에 부품(재장전 속률7.5% 들어간 거랑 이것저것) 공격력을 더해서 구함 = 2505

백분율(%): 45(전무) + 20(의료 지원) + 10(풀돌) = 75

숨겨진 백분율(%): 0

추가 공격력: 0

무기 매칭률: 전무 풀재 = 181.26

최종 대미지 증가(%): 호감도 만렙 = 5

주는 대미지 증가(%): 24(지원 2세트 효과) + 8.5*3(3옵션 KP유형 대미지 증가 만렙) = 49.5

적 받는 대미지 증가(%): 0

적 방어력 계수: 1 / (1 + (1000 x (1 - 0) - 300(만트라 신경 효과) - 30 x 300(싱크로율 인덱스)/100) / 1000) = 0.6211...

적 내성 계수: 일단 1로 놓자 = 1

적 쉴드 계수: 일단 1로 놓자 = 1

총기 계수: 볼트 액션이라 100%

크리티컬 강도: 35(전무) = 35



스킬 대미지 계산

참고: https://arca.live/b/projectsnow/100851822


E스킬 대미지 계산

설명 안한 값들은 이전과 동일함


주는 대미지 증가(%): 20(전무 풀재) + 24(지원 2세트 효과) + 46(지원 3세트 효과) + 8.5*3(3옵션 KP유형 대미지 증가 만렙) = 115.5

스킬 백분율(%)과 스킬 추가 공격력: 스킬 설명에 나와있음



E스킬 사용 직후 비조준 사격 대미지 계산


설명 안한 값들은 이전과 동일함


주는 대미지 증가(%): 20(전무 풀재) + 24(지원 2세트 효과) + 46(지원 3세트 효과) + 8.5*3(3옵션 KP유형 대미지 증가 만렙) +25(4돌 효과) = 140.5



일단 DPS를 구하기 전에

지원 옵션에 따라 사격, 스킬 대미지가 각각 어떻게 되는지 계산할건데

공격력 증가(%), 크리티컬 강도(%), 싱크로율 인덱스, 스킬 가속, 일반 에너지 회복

각 지원 옵션들의 갯수를 a, b, c, d, e 로 놓고

경우의 수를 구할 경우 너무 많음

따라서 일단은 일반 에너지 회복 옵션(e)은 고려 안할거임.


a = 1일 경우 공격력 증가 10%를 의미하고

c = 2일 경우 싱크로율 인덱스 212을 의미함


지원 소대는 3개이고 각 소대마다 두 가지 옵션이 있으니

a + b + c + d = 6 이고 이때 a, b, c, d 는 모두 3을 초과할 수 없고 0 이상의 정수임


d(스킬 가속) 값이 0, 1, 2, 3 일때

경우의 수를 구하면 좌측에 나온 표와 같음 (총합 44가지)

빨간색 글자는 세로열(44개)중 최댓값을,

주황 배경색은 스킬 가속, 일반 에너지 회복의 갯수가 같은 경우에 대한 세로열중 최댓값을 의미함.


이 표를 보면 알 수 있는 건 공격력 증가(%), 크리티컬 강도(%), 싱크로율 인덱스 3가지 옵션 중에서는

일반적으로는 공격력 증가(%)가 가장 효율적이고, 싱크로율 인덱스가 가장 비효율적임을 알 수 있음.



이 결과를 바꾸기 위해서는 서포터가 공격력 증가(%), 추가 공격력, 크리티컬 강도, 방어력 무시 등의 버프제공을 해줘야 함.


만약 추가 공격력 2000을 제공하는 서포터가 있다면? (5이첼 같은)

공격력 증가(%)의 효율이 떨어지고 대신 그 자리를 크리티컬 강도(%)가 차지한 것을 볼 수 있음.

추가 공격력 2000만 줬는데도 이런 결과가 나왔음.


즉, 공격력 증가(%)와 크리티컬 강도(%)는 적당히 상호 교환 가능한 옵션이라 볼 수 있음

(일반적으론 공증이 우세)


이번에는 추가 공격력 2000에다가 크리티컬 강도를 30정도 줘보겠음

아직도 싱크로율 인덱스의 효율이 구대기인 것을 볼 수 있다.

공격력 증가와 크리티컬 강도는 어느정도 균형을 이뤘음



이번엔 극단적으로 추가 공격력 7500, 크리티컬 강도 120을 줘보겠음

이제서야 조금씩 싱크로율 인덱스가 빛을 발할려고 함


이 상태에서 추가 공격력을 100만 더 올려주면?(7600)

이제서야 공격력 증가(%)와 싱크로율 인덱스 사이의 균형이 깨지며
크강 > 싱크 > 공증 순으로 우선순위가 낮아지는 것을 볼 수 있음


즉, 싱크로율 인덱스는 사실상 개 쓰레기 옵션

세 가지 옵션 중에 고르라면 무조건 공증을 골라야 하며
만약에 추공이나 공증(%)를 제공하는 서폿이 있다면 크강 위주로 고르는 것도 좋음.

크강만 올려주는 서폿이 있다면 무조건 공증을 고르자.

공증이나 크강 서폿 둘 다 있다면 수치 알아서 잘 대입해서 고르자...

어지간하면 걍 공증 = 크강 이라 생각하고 고르면 될 듯


어차피 싱크로율 인덱스가 쓰레기니까, 특수 스킬을 고려하지 않아도 된다는 명분1이 생긴 셈이다...(특수 스킬 사용시 방어력 무시가 추가 되므로 싱크로율 인덱스의 효율이 더욱 떨어짊)


방어력 무시라는 기능은 사실상 5마리안에게만 주어진 특권이라 할 수 있으니 일반적으론 싱크로율 인덱스의 효율이 가장 높아야 정상이겠지만
그럼에도 불구하고 싱크로율 인덱스당 방어력 무시 증가량이 너무 적어서 발생하는 문제로 보임.

(싱크로율 인덱스 100당 방어력 무시 +30)


밸런스가 왜 그럴까? 에 대해 고민해보면 적 방어력 계수의 구조적 결함에 주목해야함.
방어력 무시가 0일때와 1000일때를 비교해보면
적 방어력 계수는 각각 0.5와 1로, 전자 대미 후자가 2배의 대미지를 낼 수 있음.

그러나 방어력 무시가 1000을 넘어갈 경우 적 방어력 계수는 기하급수적으로 증가하게되며, 2000이 되면 무한대가 되버림.

이러한 이유로 방어력 무시 증가량을 적게 설정한 것으로 보임.



이제 DPS를 계산하기 위해서 5마리안의 공격 패턴을 결정할 거임

그 전에, 용어 단축을 하겠음

조준 사격 = 조준 사격

일반 스킬 = E

일반 스킬 사용 후 비조준 사격 = 평


일반적으로 유저들은 조준 사격 후 E - 평 - E - 평 - E - 평
이러한 공격 패턴을 선호함.

하지만 무조건 E - 평을 연속으로 사용하는게 

조준 사격 - E - 평 패턴을 반복하는 것 보다 DPS가 높을까?

결론부터 말하면, 전체 DPS는 똑같지만 짧은 시간 내에 적을 쓰러뜨릴 수 있다면 중요해짐.
즉, 순간 DPS만 높아질 뿐 전체 DPS는 변함이 없음


(a) 조준 사격 - E - 평 - E - 평 - 조준 사격

(b) 조준 사격 - E - 평 - 조준 사격 - E - 평


두 경우 다 조준 사격, E, 평의 횟수가 같음(총 대미지가 같음).

소요 시간을 분석해보면


*딜: 딜레이의 줄임말

(a) 조준딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+장전딜+조준딜+장전딜

(b) (조준딜+사격후딜+스킬딜+스킬후딜+장전딜) x 2


둘다 같은 값이다...


하지만 E - 평을 연속으로 사용하는게 일반적으론 좋음.

1. 재장전 시간(등등)중에 스킬이 꽉차서 낭비될 일이 줄어듦

2. 몹의 체력이 얼마 남지 않았을 경우 빠르게 처치할 수 있음



이러한 논리를 바탕으로

C++ 언어를 이용해 5마리안의 공격 패턴을 얻을 수 있도록 코딩했음
반나절 이상 걸린 매우 ㅈ같은 작업이었음

소스코드

#include <iostream>

#include <iomanip>


//풀돌 5마리안 + 전무 기준 스킬/사격 패턴 계산기 (무기 부품 재장전 속률 7.5% 적용함, 특수 스킬 고려 X)



// 캐릭터 초기 변수

double skill_acc;// 스킬 가속 옵션 수치

double s_energy_recovery;// 일반 에너지 회복(%) 옵션 수치

double limit_t_tot;// DPS측정 최대 시간

int max_ammo = 6;

double skill_counts = 3.0;

double s_energy = 50.0;


double skill_cooldown;// 지원 옵션에 의한 쿨타임(초)

double s_energy_recovery_rate;// 일반 에너지 회복 속도(s-energy/초)


// 사격/스킬 등 딜레이 측정값 (60프레임 단위로 측정함)

double aim_shooting_delay = 20.0/60;// 실력에 따라 달라지며 이 값은 잘 쏘는 사람 기준임

double shooting_after_delay = 10.0/60;

double load_delay = 1.5;// 총기 스탯에 분당 발사속도가 있으므로 1 / (40/60) = 1.5 (초/회)

double reload_delay = 1.8 / 1.075 + 22.0/60;// 1.8(총기 스탯에 표기된 재장전 시간) / (1 + 재장전 속률 부품 효과) 과 다음 사격 직전까지 소요되는 약간의 딜레이를 더해서 구해짐

double skill_delay = 13.0/60;

double skill_after_delay = 19.0/60;


int behavior;// 0:(약점)조준 사격, 1:(약점)조준 사격 후 재장전, 2:조준사격-E-평, 3:조준사격-E-평-E-평

int behavior_counts[6] = {0, 0, 0, 0, 0, 0};// 행위의 번호에 대응하는 인덱스당 횟수를 나타내는 배열

int ammo = max_ammo;

double t_available_cooldown = 0.0;// 스킬 쿨타임 계산에 유효한 시간

double t_available_recovery = 0.0;// 일반 에너지 회복 계산에 유효한 시간 (사실상 위와 동일한 값)

double t = 0.0;// 각 행위의 소요 시간

double t_tot = 0.0;// 누적 소요 시간



double available_skillcounts() {// 조건문 조건 판별에 사용함. 조준사격-E-Q-... 행위를 하기 전, 만약 일반 스킬 사용 전에 스킬 충전이 끝나면(3.0) 아닐 경우 (현재 스킬 갯수) + (일반 스킬 사용 전까지 충전되는 스킬 갯수)를 반환함


    if (skill_counts + (aim_shooting_delay + shooting_after_delay) / skill_cooldown > 3.0) {

        return 3.0;

    }

    else {

        return skill_counts + (aim_shooting_delay + shooting_after_delay) / skill_cooldown;

    }

}


double available_recovery() {// 위와 동일한 메커니즘으로 일반 스킬 사용 직전까지 충전된 일반 에너지 값을 반환함


    if (s_energy + (aim_shooting_delay + shooting_after_delay) * s_energy_recovery_rate > 50.0) {

        return 50.0;

    }

    else {

        return s_energy + s_energy_recovery_rate * (aim_shooting_delay + shooting_after_delay);

    }


}


void determine_t_available_cooldown() {// 만약 일반 스킬 사용 전에 스킬 충전이 끝나면(3.0) 스킬 쿨타임 계산에 필요한 시간변수(t_available_cooldown)가 변해야 함. 꼼수를 이용해 코드를 간략화하였음


    if (skill_counts + (aim_shooting_delay + shooting_after_delay) / skill_cooldown > 3.0) {

        skill_counts = 3.0;

        t_available_cooldown = t - (aim_shooting_delay + shooting_after_delay);

    }

    else {

        t_available_cooldown = t;

    }

}


void determine_t_available_recovery() {// 위와 동일한 메커니즘으로 일반 에너지 회복 계산에 필요한 시간변수(t_available_recovery)가 변함


    if (s_energy + (aim_shooting_delay + shooting_after_delay) * s_energy_recovery_rate > 50.0) {

        s_energy = 50.0;

        t_available_recovery = t - (aim_shooting_delay + shooting_after_delay);

    }

    else {

        t_available_recovery = t;

    }


}


void skill_charging_calculation(double x) {// 행위가 끝난 후 남은 스킬의 갯수 결정

    skill_counts += x / skill_cooldown;


    if (skill_counts > 3) {

        skill_counts = 3;

    }


}


void  s_energy_calculation(double x) {// 행위가 끝난 후 남은 일반 에너지 결정

    

    s_energy += x * s_energy_recovery_rate;


    if (s_energy > 50) {

        s_energy = 50;

    }


}




int main()

{


    std::cout << "스킬 가속 수치를 입력하세요: ";

    std::cin >> skill_acc;

    std::cout << "일반 에너지 회복(%) 수치를 입력하세요: ";

    std::cin >> s_energy_recovery;

    std::cout << "몇 초 동안 계산을 진행하겠습니까? ";

    std::cin >> limit_t_tot;


    skill_cooldown = 4 * 100 / (100 + skill_acc);

    s_energy_recovery_rate = (100 + s_energy_recovery) / 100;



    while (t_tot <= limit_t_tot){


        if (ammo >= 6 && available_skillcounts() + ((skill_delay + skill_after_delay + shooting_after_delay) * 3) / skill_cooldown >= 4 && available_recovery() + s_energy_recovery_rate * (skill_delay + skill_after_delay + shooting_after_delay) * 3 >= 16) {// 조준딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+장전딜


            t = aim_shooting_delay + (shooting_after_delay + skill_delay + skill_after_delay) * 4 + load_delay;

            ammo -= 5;

            behavior = 5;


            determine_t_available_cooldown();

            determine_t_available_recovery();

            skill_counts -= 4;

            s_energy -= 16;


        }

        else if (ammo >= 5 && available_skillcounts() + ((skill_delay + skill_after_delay + shooting_after_delay) * 2) / skill_cooldown >= 3 && available_recovery() + s_energy_recovery_rate * (skill_delay + skill_after_delay + shooting_after_delay) * 2 >= 12) {// 조준딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+장전딜


            t = aim_shooting_delay + (shooting_after_delay + skill_delay + skill_after_delay) * 3 + load_delay;

            ammo -= 4;

            behavior = 4;


            determine_t_available_cooldown();

            determine_t_available_recovery();

            skill_counts -= 3;

            s_energy -= 12;


        }

        else if (ammo >= 4 && available_skillcounts() + ((skill_delay + skill_after_delay + shooting_after_delay) * 1) / skill_cooldown >= 2 && available_recovery() + s_energy_recovery_rate * (skill_delay + skill_after_delay + shooting_after_delay) * 1 >= 8) {// 조준딜+사격후딜+스킬딜+스킬후딜+사격후딜+스킬딜+스킬후딜+장전딜

                

            t = aim_shooting_delay + (shooting_after_delay + skill_delay + skill_after_delay) * 2 + load_delay;

            ammo -= 3;

            behavior = 3;


            determine_t_available_cooldown();

            determine_t_available_recovery();

            skill_counts -= 2;

            s_energy -= 8;


        }

        else if (ammo >= 3 && available_skillcounts() >= 1 && available_recovery() >= 4) {// 조준딜+사격후딜+스킬딜+스킬후딜+장전딜


            t = aim_shooting_delay + shooting_after_delay + skill_delay + skill_after_delay + load_delay;

            ammo -= 2;

            behavior = 2;


            determine_t_available_cooldown();

            determine_t_available_recovery();

            skill_counts -= 1;

            s_energy -= 4;


        }

        else {// 조준딜+ (장전딜 or 재장전딜)

            if (ammo >= 2) {

                t = aim_shooting_delay + load_delay;

                ammo -= 1;

                behavior = 0;

            }

            else {

                t = aim_shooting_delay + reload_delay;

                ammo = max_ammo;

                behavior = 1;

            }


            t_available_cooldown = t;

            t_available_recovery = t;


        }


        skill_charging_calculation(t_available_cooldown);

        s_energy_calculation(t_available_recovery);

        behavior_counts[behavior] += 1;

        t_tot += t;

        std::cout << "행동은 " << behavior << ", ";

        std::cout << "잔여 일반 스킬: " << std::fixed << std::setprecision(2) << skill_counts << "(개), ";

        std::cout << "일반 에너지: " << std::fixed << std::setprecision(2) << s_energy << "(S-Energy), ";

        std::cout << "탄약: " << ammo << "발" << std::endl;


    }

    

    std::cout << std::endl << "======================================================" << std::endl << "스킬 가속이 " << skill_acc << ", 일반 에너지 회복이" << s_energy_recovery << " 이고, " << t_tot << "초간 시뮬레이션할 경우" << std::endl;

    std::cout << "각 행위당 총 횟수는 " << std::endl;

    std::cout << behavior_counts[0] << "(회) <조준 사격>" << std::endl;

    std::cout << behavior_counts[1] << "(회) <조준 사격 후 재장전>" << std::endl;

    std::cout << behavior_counts[2] << "(회) <조준 사격 - E - 평>" << std::endl;

    std::cout << behavior_counts[3] << "(회) <조준 사격 - E - 평 - E - 평>" << std::endl;

    std::cout << behavior_counts[4] << "(회) <조준 사격 - E - 평 - E - 평 - E - 평>" << std::endl;

    std::cout << behavior_counts[5] << "(회) <조준 사격 - E - 평 - E - 평 - E - 평 - E - 평>" << std::endl;




    return 0;


}


for문을 사용하면 훨씬 짧아지지만 사용하지 않는 게 이해가 더 쉬울 것 같아 그대로 놔뒀음(내가 보기에도 편함)


이 코드를 짧게 설명 하자면 최대한 E - 평을 연속으로 사용하려고 함.

지금 생각해보니 왜 이렇게 했는지 모르겠음 그냥 E - 평 패턴이랑 조준 사격 - 장전, 조준 사격 - 재장전 패턴 이렇게 세 가지만 고려해도 됐었을 것 같은데...

유저들의 경우 스킬 쿨타임이 조금 남았을때 사격을 하지 않고, 기다렸다가 E - 평을 쓰지만

이 코드의 경우 절대 그러지 않음. 즉 쉬는 시간이 없음

하지만 예를 들어 조준 사격 - E - 평 - E - 평 공격 패턴을 사용할려고 할 때

스킬 쿨타임/일반 에너지 회복을 계산해서 현재 스킬 충전량이 2보다 작더라도 저 패턴이 가능하다면 (조준 사격 동안 스킬이 충전 된다면) 그 패턴을 사용함.

또한 절대로 탄약 수가 0이 되기 전까지는 재장전을 하지 않음.



문제점은, 스킬/사격 등의 행위에서 딜레이를 마리안 플레이 영상을 60프레임 단위로 쪼개서 구하긴 했는데, 오차가 있을 수도 있음


따라서 유저의 패턴과 99%동일하다고 볼 순 없지만, 나는 이게 최대 DPS를 내는 공격패턴 알고리즘일 것이라고 생각함.

당연히 내가 틀렸을 수도 있음



이런식으로 스킬 가속, 일반 에너지 회복, 계산 시간을 설정하면

각 행위(패턴)을 한 이후의 상태와

각 행위(패턴)의 총 횟수를 알려줌


놀랍게도, 스킬 가속이 19.3 x 3 (극옵), 일반 에너지 회복이 0 일 때
60초 동안 전투를 해도 일반 에너지가 남는 걸 볼 수 있음.

80초 정도 경과하면 일반 에너지가 부족해서 공격 패턴이 스킬 가속 0일 때와 동일해짐


이러한 이유로, 일반 에너지 회복 옵션은 일반적으로는 좋지 못하다 볼 수 있음


아무튼 간에, 이런식으로 노가다해서 패턴을 정리한 표가

이거고, 이걸 바탕으로


마침내 DPS를 구할 수 있었음.


가로열(행)을 보면 전투 시간이 대략 15 -> 30 -> 45 -> 60 으로 늘어나면서 대체적으로 DPS가 점점 줄어드는 양상을 보이는데,

처음에 충전되있던 3개의 일반 스킬을 연속으로 사용했기 때문에 순간 DPS가 매우 높았으나, 그 뒤로는 스킬 쿨타임에 의해 DPS가 점점 떨어진다는 뜻이고, 스킬 가속이 높을 수록 DPS 유지가 원활해진다는 뜻임.

실제로, 스킬 가속이 57.9일때는 DPS가 거의 일정한 모습을 볼 수 있음.

스킬 가속이 38.6, 57.9일때는 초반(15초간)에 DPS가 작아보이는데

이건 단순히 공격 패턴을 좋지 않은 타이밍에 끊었기 때문에 생기는 표기상의 오류임.

예를 들어 (강력한 공격 - 약한 공격) 과정에서 구한 DPS가
(강력한 공격 - 약한 공격 - 강력한 공격) 과정에서 구한 DPS보다 당연히 낮음.


만약 전투시간이 극단적으로 (대략 5~7초?) 짧을 때

일반 스킬이 최초에 3개 충전되있으므로
스킬 가속 그딴거 재끼고 당연히 공증 30% + 크강31.8% 조합이 가장 높은 DPS낼거임.

따로 구하진 않았지만 만약 5~7초간의 공격패턴을 계산해서 DPS를 나타냈다면
무조건 공증 30% + 크강31.8% 조합이 눈에 띄게 높았을 거임.


아무튼 서폿이 없을때 기준으로

공증 30% + 크강 31.8% 조합이 전투 시간이 15초 정도라면 가장 좋고

스가 38.6 + 공증 30% + 크강 10.6% 조합이 전투 시간 30초~60초 정도일 땐 가장 좋다는 걸 알 수 있음.



이때 스킬 가속 57.9가 무조건 쓰레기라고 단정 지을 수 있을까?

알고리즘의 문제로 인해, 스킬 가속이 57.9일 때

행동 1(조준 사격 후 재장전)이후 잔여 일반 스킬이 3개로 풀 충전 되는 것을 볼 수 있음.

즉, 스킬이 행동 도중 꽉 차서 쿨타임을 제대로 못돌리고 있다는 뜻.

아까 내가 이 알고리즘은 절대로 쉬는 시간이 없다고 했음.

유저들은 조준 사격 - E - 평 - E - 평 - E - 평을 한 후에 스킬 쿨타임이 얼마 남지 않았다면 조금 기다렸다가 E - 평을 또 쓰겠지만

이 알고리즘에선 조준 사격 - E - 평 - E - 평 - E - 평을 한 후 스킬이 0.8 ~ 0.9개 정도 충전됐을 때 쉴 생각을 하지 않고, 사격 후딜이 끝나고 마침내 일반 스킬이 1.36개가 되었음에도 불구하고 조준 사격을 해버림...


아무튼 그런 걸 감안하면 실제 유저들 입장에선 스킬 가속 57.9일 때의 DPS가 표에 나온 것 보단 아주 조금 오를 거임. (쉬는 시간이 있다는 것은 어쨌든 DPS가 줄어드는 방향이기 때문에...)



이번엔 스킬 가속 70을 제공하는 서폿과 추가 공격력 2000을 제공하는 서폿이 있다면 어떨까?
(현재시점에서 스킬 가속 서포터는 존재하지 않음)

공격 패턴은 이렇게 계산됐고

스킬 가속 70, 89.3일 때는 아까 스킬 가속 57.9일 때처럼 알고리즘의 문제로 인해 스킬 쿨타임을 제대로 못 돌리고 있음



스킬 가속의 효율이 대체로 떨어져야 하지만

스킬 가속이 108.6일때 공격 패턴이 조금 변화하면서 DPS가 상승하였고

스킬 가속이 127.9일때 갑자기 DPS가 30초동안 다른 옵션들에 비해 넘사벽급으로 높아짐

이유는 조준 사격 - (E - 평) x 4 - 조준 사격(후 재장전) 패턴을 30초간 연속으로 사용하는 것이 가능해졌기 때문임

그렇다면 이 알고리즘에서 더 이상의 스킬 가속 옵션은 필요가 없다는 사실을 자연스럽게 유추할 수 있음.

(이 알고리즘에서 유효 스킬 가속 옵션 값은 대략 130정도)


또한 일반 에너지의 부족으로 후반으로 갈 수록 전체DPS가 줄어듦을 보임

이쯤 되면 일반 에너지 회복을 하나 정도 넣어주는 것도 나쁘진 않을 듯 하다



만약 추가 공격력 2500에 크리티컬 강도 30%를 주는 서폿이 있다면?

단기적으로 봤을 땐 스가 서폿이 좋지만, 일반 에너지가 부족하여 중-후반으로 갈 수록 스가 서폿이 아닐 때가 더욱 우세한 모습.


스가 서폿이 나온다면 5마리안이 떡상할거란 소문이 도는데
수치만 잘 나오면 나쁘지 않을 것처럼 보임.

지원 옵션은 이 알고리즘(모델)에서는 3스가가 우선되었지만 이건 모델의 문제이지

실제로는 공+크강이 맞을 거라고 생각함.




결론: 

1. 스킬 가속 서폿이 존재하지 않는 현 시점에서는 일반적으론 스가 38.6~57.9 + 공증과 크강을 적당히 섞는게 제일 좋음(무조건 스가를 3개 맞출 필요는 없음)

설령 5마리안 + 5시에라 조합이라 하더라도
야테시 조합의 5야오는 크강이 우선시되지만 (물론 공30% 크강31.8%이 베스트긴 하다만...)

5마리안은 전무에 크리티컬 강도 추가 옵션이 있으므로
계산 결과 지원 옵션의 공증과 크강은 1 : 1 비율에 가깝게 맞춰주는 것이 좋음(굳이 우세한 쪽을 따지자면 그래도 크강이 더 좋음)



2. 전투가 대략 10초 정도 내에 끝난다면 공 30% + 크강 31.8% 가 가장 좋을 수 있음


3. 일반 에너지 회복 옵션은 스킬 가속이 57.9 일 때 전투 시간이 70초 넘어가지 않는 이상 추천 안하고
설령 넘어간다 하더라도 에회를 올릴 바에 공증 같은걸 올리는게 훨씬 좋아보임


4. 스킬 가속 서폿이 5마리안 전용 서폿이 될 수도 있을 것 같음