개인 자료란 (JE)

  서버 커뮤니티


Profile 스크립터브혼 대표칭호 없음

Vhone dc73ee51d49946dabf4f634c6e3ce5c6

Profile

강좌 및 개발 자바 에디션(JE) 플러그인 개발

[함수] 간단하게 랭킹을 출력해주는 함수

2021.03.31 조회 수 519 추천 수 1
분야 스크립트 
게임버전 1.16.x 
API 스피곳, 페이퍼 
자료글 https://github.com/SkriptLang/Skript 

이번에 공유할 함수는 랭킹을 출력해주는 함수입니다.
[2016년], [2017년] 랭킹 코드 포스트의 연장선입니다.


간단하게 이름과 점수를 넘겨주면 그대로 랭킹으로 출력해주고, 문장의 폼과 출력 등수도 설정 할 수 있어요.



function EffSendRank(s:senders,key:texts,value:numbers,form:text="",line:integer=5):
    set {_form} to "[<rank>] <key> = <value>" if {_form} is ""
    loop {_value::*}:
        set {_value} to loop-value * 10000
        add loop-index to {_rank::%{_value}%::*}
    set {_index::*} to reversed indexes of {_rank::*}
    loop {_index::*}:
        set {_value} to loop-value parsed as integer / 10000
        add 1 to {_rank}
        loop {_rank::%loop-value-1%::*}:
            set {_msg} to {_form}
            replace "<rank>" with "%{_rank}%" in {_msg}
            replace "<key>" with {_key::%loop-value-2%} in {_msg}
            replace "<value>" with "%{_value}%" in {_msg}
            add {_msg} to {_ranking::*}
        if {_rank} >= {_line}:
            exit loop
    send {_ranking::*} to {_s::*}

key와 value를 1:1 매칭되게 넣어주면 그대로 랭킹을 출력해 줍니다.
예를들어 A, B, C 세명이 각각 1점, 2점, 3점이라면
{_key::*}는 "A" and "B", "C"
{_value::*}는 1 and 2, 3
이렇게 세팅하면 됩니다.



command /text.rank:
    trigger:
        set {_key::*} to "짱구" and "맹구", "철수", "훈이", "유리"
        set {_value::*} to 3.5 and 3, 7, 3.5, 5.5
        EffSendRank( player, {_key::*}, {_value::*}, "[<rank>등] <key>(<value>)", 3 )

// [1등] 철수(7)
// [2등] 유리(5.5)
// [3등] 짱구(3.5)
// [3등] 훈이(3.5)

문장 폼에서 등수는 <rank>, 키는 <key>, 값은 <value>를 사용합니다.
예시와 같이 "[<rank>등] <key>(<value>)" 넣어주면 주석처럼 출력됩니다.
기본값이 있기 때문에 폼을 정하지 않으면 "[<rank>] <key> = <value>"으로 출력됩니다.

함수의 마지막 인수는 출력 등수입니다. 등수 기준으로 출력되기 때문에 동점자도 3등 이내라면 모두 출력됩니다.
기본값은 5 입니다.


command /text.rank:
    trigger:
        set {_list::짱구} to 3.5
        set {_list::맹구} to 3
        set {_list::철수} to 7
        set {_list::훈이} to 3.5
        set {_list::유리} to 5.5
        EffSendRank( player, indexes of {_list::*}, {_list::*}, "[<rank>등] <key>(<value>)", 5 )

// [1등] 철수(7)
// [2등] 유리(5.5)
// [3등] 짱구(3.5)
// [3등] 훈이(3.5)
// [4등] 맹구(3)

이전 방식의 인덱스, 값의 형태를 사용한다면 [Indexes of] 익스프레션으로 인덱스 값을 키로 넘겨주면 됩니다.





Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!