분야 | 스크립트 |
---|---|
게임버전 | 모든버전 |
저는 스크립트를 사용하면서 모든 데이터를 콘피그를 이용해서 한개 또는 여러개의 csv 파일에 모두 저장하고 불러오는 것을 굉장히 좋지 않다고 생각합니다.
또한 실제로 상당 부분의 렉은 그로 인해서 발생하죠. (-> 주기를 가지는 렉)
만약 스크립트로 인해 발생하는 렉을 최소화하고 싶으신 분들께 저는 DB를 사용해 보는 것을 추천드립니다.
아무튼 위의 이유로 저는 스크립트로 DB를 사용하는 것이 좋은 선택이라고 생각합니다. (config 제외)
그럼 여러분들은 스크립트로 DB를 사용해보려고 시도해보신 적이 있으신가요?
만약 그렇다면 Skript로 DB를 사용하려면 Skellett / skript-db 애드온 밖에는 선택지가 없단 사실을 알 것입니다.
하지만 안타깝게도 Skript에서 DB를 쓸 수 있는 희망이란 남아있지 않는 것인지, 저희에게 돌아오는 것은 굉장히 처참한 사실뿐입니다.
Skellett은 코드가 너무 낡아서 개발자가 지원 중단을 선언하였습니다.
skript-db는 최근의 평가들을 보면 알듯이 버그가 존재하는 상황입니다.
이런.. 안타깝게도 저희에게 있던 두개의 희망은 정말로 모두 날아가버렸군요..
그럼 Skript에서 DB를 쓰는 것은 불가능한 염원인걸까요?
아닙니다.
위와같은 이유로, 대부분이 스크립트에서 DB를 쓰는 것은 힘들다고 생각들을 합니다. (물론 엄청나게 번거로운 방법을 이용해서 사용을 할 수는 있습니다.)
하지만 이에 대한 해결책이 있습니다.
그것은 고장나버린 skript-db에 skript-mirror을 활용해 고장난 부분을 고쳐주는 것입니다.
현재 skript-db에서 문제가 되는 부분은 Skript가 업데이트 되면서, 쿼리를 async로 처리하는 과정에 모든 임시변수의 값을 초기화시켜버리는 아주 심각한 문제입니다.
문제가 되는 코드 예제:
set {_testVar} to "String for test"
execute "SELECT 'money' FROM 'vault' WHERE 'uuid' = %player's uuid% LIMIT 1" in {db} and store result in {_result::*}
broadcast "%{_testVar}%" // <none>
broadcast "%{_result::money::1}%" // <none>
하지만 우리는 해당 문제를 skript-mirror를 활용해서 고쳐줄 수 있습니다.
아래와 같이 하면 해결가능합니다.
CODE:
effect get %player%['s] money:
trigger:
await 0.toString()
execute "SELECT 'money' FROM 'vault' WHERE 'uuid' = %expr-1's uuid% LIMIT 1" in {db} and store result in {_result::*}
broadcast "%{_result::money::1}%"
혹시나 skript-db의 사용법을 모르신다면, 아래 링크를 참조하세요.
(+skript-db는 기본적으로 SQL Injection공격을 막아줍니다.)
https://github.com/btk5h/skript-db
또한 제가 Skript에 손을 땐지가 꽤 돼서, 상당히 이전에 작성한 코드지만,
혹시나 필요하실 분들을 위해 이전에 만든 시스템 중 skript-db에 관련된 제 코드도 같이 업로드합니다.
댓글이 없습니다.
새로운 댓글을 등록해 주세요!