뭔가 잘만든 게임을 만드려는건 아니고 RPG게임을 구현하는데 필요한 요소들을 여러 게임에서 따와서 그대로 구현해보고있습니다.

스킬을 롤처럼 만들어보려고하고 있는데 롤의 경우 보면


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec86fa11d0283110260b998d7cfa8997b92765238b1b72e7a2b00c9903c348f38bc4096b1718a131061dfd24c9fd66b41cdb82b9a91850b953446a

다리우스의 w스킬입니다. 데미지를 구성하는 요소가 1. 계수 2. 계수랑 곱할 스탯 이렇게 구성되어있는것 같네요

추가적으로 디버프도 있습니다. 구성하는 요소는 1. 디버프의 대상이 상대방인지 나 자신인지 2. 값을 조절할 스탯 3. 조절양 으로 구성되어있는것 같습니다.

마나 소모량은 고정되어있고 재사용 대기시간은 레벨별로 달라집니다.

그리고 다리우스의 스킬에 맞은 적은 출혈 상태에 돌입하게 됩니다.

하단의 추가적인 요소는 무시했습니다. (위에 만으로도 벅차서 ㅜ)


여러가지 계속 찾아본 바로는 데미지의 계수에 곱할 스탯은 자신의 스탯일 수도 있고 상대방의 스탯일 수도 있습니다.

스킬의 타겟은 물론 내가 될 수도 있고 적, 아군이 될 수도 있습니다.


스킬 클래스에는

1. 각 인스턴스마다 부여될 ID (RPG기 때문에 같은 스킬을 보유한 여러 캐릭터가 존재할 수 있음)

2. 이름

3. 설명

4. 현재 레벨, 최대 레벨

5. 스킬을 배우기 위해 필요한 레벨(RPG라서 추가했습니다.)

6. 마나 소모량

7. 재사용 대기시간

8. 스킬의 타겟('적' 또는 '자신' 또는 '아군')

9. 타겟팅인지, 논타겟팅인지

10. 스킬이 투사체를 갖고 상대방을 향해 날아가는지 혹은 단순히 대상 위치에서 효과만 보여주면 되는지 (예를 들어 소라카의 q는 특정 위치로 투사체가 날아가지만(스킬 시전 위치에 따라 스킬이 끝나는 시간이 다른걸로 보아 그렇게 생각했습니다.) 궁은 타겟의 머리 위에서 효과만 보여주면 됩니다.)

11. 데미지 구조체

12. 버프/디버프 구조체

13. 상태이상 구조체


데미지는 다음과 같이 구성됩니다.

1. 계수에 곱할 스탯이 '자신'의 스탯인지 '상대방'의 스탯인지

2. 계수에 곱할 스탯

3. 스탯에 곱할 계수

또는

1. 단순히 데미지양 제시


버프/디버프는 다음과 같이 구성해봤습니다.

1. 적용할 스탯

2. 계수에 곱할 스탯이 '자신'의 스탯인지 '상대방'의 스탯인지

3. 계수에 곱할 스탯

4. 스탯에 곱할 계수

5. 지속시간

또는

1. 단순히 조절량 제시


상태이상은 다음과 같이 구성해봤습니다.

1. 해당 스킬에 맞을 시 변하게 될 타겟 상태

2. 지속시간


계수로 구성된 값들은 스킬이 타겟에게 적용될 때마다 그 순간 최종 값을 계산하여 적용시킵니다.

체력이야 바로바로 깎고 더해주고 하면 되겠지만

버프/디버프는 적용시간이 있습니다. 이를 위해서 캐릭터에 부착될 클래스에 ActiveBuf라는 구조체를 생성해주었습니다.

ActiveBuf에는 적용된 스탯의 이름, 양, 지속시간 값이 저장되어있습니다.

지속시간이 다 되면 해당 스탯에 적용된 값을 다시 빼옵니다.


그리고 이 모두를 위에 첨부한 이미지 처럼 텍스트로 풀어쓸 수 있어야합니다. 현재 생각해본 바로는 string.Format을 비슷하게 이용하는 방식입니다.

string.Format은 특정 문자열에 {0}, {1}, {2} ... 와 같이 인자로 받은 값으로 대채할 부분을 명시해주고 해당 문자열과 함께 대체할 값들을 인자로 넘겨줍니다.

이걸 그대로 사용하면 어떤 부분에 어떤 값이 들어가야할지 유동적으로 알려줄 수가 없기 때문에 {데미지의 양}, {버프/디버프가 적용될 스탯}, {버프/디버프의 양} 과 같이 직접적으로 명시해주고 하나하나 케이스를 따로 처리해주려고 합니다. 그리고 최초에 테이블에 저장될 스킬 클래스에는 설명 값이 '상대방에게 {데미지의 양}만큼 피해를 입힙니다.' 와 같이 작성해주면 됩니다.