개인 자료란 (JE)

  서버 커뮤니티

Profile 눙이 대표칭호 없음

NUngiboy 6e95e864e48245c2afe38069f3b5551f

Profile

커뮤니티 소통 잡담하기

[1.17.1] 저번에 만들었던 총 스크립트를 더 개선하여 돌아왔습니다 [배포]

2021.11.01 조회 수 1772 추천 수 1

마인크래프트 버전 : 1.17.1

스크립트 버전 : 2.6 beta 3

필요 애드온 : SKbee


안녕하세요! 11월 첫 날의 낮입니다.

저번에 간단하게 만든 총 스크립트를 올린 적이 있는데요 (https://www.koreaminecraft.net/free/2895084)

혼자서 테스트를 진행해 본 결과 다음과 같은 문제점이 발견되었습니다.

1) 엔티티가 벽 뒤에 있는 경우 벽을 뚫고 데미지를 주던 오류

2) 목표로 둔 엔티티 사이에 떨어진 아이템이 존재할 경우 총알 이펙트가 더 이상 나아가지 못 하던 오류

3) 그 외 수많은 잡 오류 등등

그래서 알고리즘을 뜯어고치고 코드를 다시 짜서 다음과 같은 코드를 만들었습니다.

코드 설명을 먼저 한 후에 배포 파일을 밑에 넣겠습니다.


# 제가 만든 총 스크립트는 히트스캔 방식이며,  인벤토리 속 탄창을 확인하는 방식은 넣지 않았습니다. 


7c4b343c942008a5155aa6904cc78234.png

이번 스크립트에서는 위와 같은 전역 변수들이 사용됩니다. 각각 총알, 사격 가능 여부, 현재 재장전 중인지 여부를 나타냅니다.


a2aa73afd091603bdbb81014222e6b8e.png

스크립트를 설정하는데 필요한 아이템입니다


d36367f82b124d68bf14a1ca66699a44.png

블럭 데이터를 "텍스트"로 받았을 때, 그 텍스트를 분석하여 적절하게 변형하는 함수입니다.

카펫의 색깔을 없애서 carpet만 돌려준다던가, 참나무 나뭇잎의 참나무를 없에서 나뭇잎만 돌려준다던가

같은 방식으로 변수에 비슷한 타입의 블럭을 많이 넣지 않아 부하를 줄이고 관리를 용이하게 하기 위한 방식입니다.


7a76885f3c41b8b75b76e50e615911a6.png

블럭 지정 막대기로 특정 블럭을 바라보고 우클릭 하면 그 블럭의 데이터가 위의 함수를 거친 후에

그 텍스트를 리스트 변수 안에 저장합니다 

567dd61f120c26ff6cc5da5cd6d418b8.png

사용하면 다음과 같은 형태로 나옵니다 (3줄당 한번)


35d72d6ab0352dc2cd7cd192b85735a2.png

목표한 엔티티와 나 사이의 경로 상의 블럭을 분석하여 표현해주는 함수입니다.

각각의 블럭이 사격조건(관통 가능)인지 아닌지를 판별하고

그에 따라 전체적으로 목표한 엔티티에 사격이 가능한지 아닌지를 판별합니다

또한 경로상에서 가장 먼저 관통 불가능한 블럭의 위치가 몇 번째인지 나타내주기도 합니다. 

사용 시 아래와 같은 모습으로 나타납니다

fe332b9b4b12d596eb2e4ce6def1d49e.png

가로막는 블럭이 아예 없으므로 사격이 가능합니다

bd06010812dfb7a8c3d745b4a90a93bb.png

가로막는 블럭이 존재하므로 사격할 수 없습니다.

여기서는 제 앞에 2번째 블럭 위치에 가로막는 블럭이 있다고 뜨는군요

9554926c495bdb8b9645299ae22bf8ed.png

가로막는 블럭이 있지만 (redstone_wire) 제가 관통 가능한 물체로 지정했기에 사격조건을 충족해 사격이 가능한 모습입니다.


0e71b4a6a041a8174dffc305c54fa0a0.png

관통 가능한 물체에 관한 변수를 관리할 때 사용하는 명령어입니다.

좀 더 이쁘게 만들 수 있었지만 귀찮아서 안 했습니다...

@ 주의 @

블럭 지정 막대기로 허공을 우클릭하면 none이 뜹니다.

그렇기에 /`peneadd air 을 꼭 쳐주셔야 총알이 공기를 가를 수 있습니다!


291c50ed6f94c359923098891d3e7b9d.png

실제로 총을 발사할 때 사용하는 구문입니다.

맨 위에 설명에 되어있는 4가지 사격 조건을 비교하여 2번째 조건일 경우 총알을 엔티티에 맞추게 됩니다

기본적인 알고리즘은 위의 pathtest 명령어랑 동일하며

추가적으로 play sound와 play dust 구문을 통하여 총소리와 총알이 나가는 이펙트를 구현하였습니다.

3384a2f715bd5be6fa9ae9ee9d08e266.png

위 구문에 이어지는 구문으로 4번째 조건의 결과가 보이고 그 밑으로는 총의 발사속도를 결정하는 구문입니다.

{fire.%player%}를 통해 사격을 불가능하게 만들고

총알 사용을 1번 add 하여 체크해주고

0.5초를 기다린 다음 다시 사격 가능으로 돌려놓습니다.

즉, 여기서 발사속도는 1발/0.5초입니다. (약 분당 120번)

그리고 중간의 설명 밑 부분도 위의 구문과 이어지며, 10발을 다 쐈을 때, 재장전을 하기 위한 구문입니다.

swing  player hand 구문과 play sound 구문을 이용하여 재장전 하는 것 같은 느낌을 주었습니다

그리고 재장전 중에는 총을 내려놓고 다른 아이템을 들지 못 하게 하였습니다


실행하면 다음과 같은 효과를 냅니다 (총 모양은 텍스쳐팩입니다.)


gun.sk 

초보자라 아직 부족한 것도 많고, 이 스크립트에도 오류가 많을 수 있습니다 (저는 잘 모르겠습니다 ㅎ...)

그래도 거의 일주일동안 고생해가면서 만든 보람이 있던 스크립트였습니다.

모두 행복한 마크 생활 되세요!




5개의 댓글

FSanchir
2021.11.01

오 멋지네요

눙이
2021.11.01
@FSanchir

좋게 봐주셔서 감사합니다!

허두
2021.11.01

이거... 자료란으로 가도 될듯..!

눙이
2021.11.01
@허두

그 정도 까지는 아니라 생각해서 잡담 포럼에 올리긴 했는데 좋게 봐주셔서 감사합니다 ㅎㅎ

퇴근 후 글 내용 보충해서 옮겨보도록 하겠습니다 ㅎㅎ

허두
2021.11.01
@눙이

이것만으로 고퀄 스크립트인데.. 자료란으로 가지 않으면 넘 아까워요!!