Çözüldü Rankup skripti

  • Konuyu Başlatan Konuyu Başlatan TheVerdant
  • Başlangıç tarihi Başlangıç tarihi
  • Görüntüleme 377
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

TheVerdant

Odunlara Vur Vur Vur!
Katılım
13 Aralık 2015
Mesajlar
49
Elmaslar
5
Puan
13.285
Yaş
27
Konum
bursa

Discord:

TheVerdant#3074

Sunucum 1.21.4 olduğu için rankup pluginini kullanamayıroum o yüzden chatgptye bir skript yazdırdım ama line 3 de hata alıyorum bunun sebebi sizce nedir
skript versiyon 2.10.2
skbee versiyon 3.10.0
skellett versiyon 2.0.10

kodumuz burda skyblock plugini olarak daha doğrusu oneblock olarak bentboxın oneblock plsini kullanıyorum onun placeholderlarında kullandığım komutu aldım "/papi parse me %Level_aoneblock_island_level% bu komutu yazarak placeholderın veri çekip çekmediğinide kontrol ettim çekiyor yani veri geliyor

Kod:
command /rankatla:
    trigger:
        set {_level} to "%Level_aoneblock_island_level%" parsed as number
        if {_level} >= 50:
            if player does not have permission "group.skylord":
                execute console command "lp user %player% parent set skylord"
                send "&aTebrikler! SkyLord rütbesine yükseldin!" to player
            else:
                send "&cZaten SkyLord rütbesine sahipsin!" to player
        else:
            send "&cSkyLord rütbesine yükselmek için en az 50 seviye olmalısın! (Şu anki seviyen: %{_level}%)" to player

Hata Mesajının Resmi

hata.webp
 
Son düzenleme:
expression hatası veriyor çünkü placeholderAPI'nin yer tutucusunu kullanıyorsunuz. skript buna doğrudan destek vermez (keşke verse, basit bi' şey sonuçta)


Not: Skript-placeholders addonu gerektirir
Kod:
command /rankatla:
    trigger:
        set {_level} to placeholder "Level_aoneblock_island_level" from player #%Level_aoneblock_island_level% < yer tutucusunu buraya ekliyoruz...
        set {_level} to {_level} parsed as number #in-line yapmadım çünkü hatırlamıyorum
        
        if {_level} >= 50:
            if player does not have permission "group.skylord":
                execute console command "lp user %player% parent set skylord"
                send "&aTebrikler! SkyLord rütbesine yükseldin!" to player
            else:
                send "&cZaten SkyLord rütbesine sahipsin!" to player
        else:
            send "&cSkyLord rütbesine yükselmek için en az 50 seviye olmalısın! (Şu anki seviyen: %{_level}%)" to player
 
şey burda yazmıyor ama diğer konudaki arkadaş tüm addonları yükletmişti bana placeholder eklentiside var yani attığınız skript tek seferde çalıştı lakin op olan kişiler için direk zaten skylord rütbesine sahipsiniz diyor bu normal dimi

DİPNOT Senin Skript Versiyonunla Sunucun Uyumsuz diyen arkadaşa gelsin bi @Anemys değilmişssin :D

bir not daha devamını eklemek istesem nasıl bir kod yapısıyla devam etmem gerekir aynı skyı kopyalayıp skylord kısmını skygod yapıpmı devam etmeliyim yoksa tek kodla hepsini yapabilirmiyim ?
 
şey burda yazmıyor ama diğer konudaki arkadaş tüm addonları yükletmişti bana placeholder eklentiside var yani attığınız skript tek seferde çalıştı lakin op olan kişiler için direk zaten skylord rütbesine sahipsiniz diyor bu normal dimi
op olan hesabınızda şu komutu kullanın: /papi parse me %Level_aoneblock_island_level%

bu doğrudan seviyenizi görüntülemeyi sağlıyor, ama sorun bu değil:

"group.skylord" < sorun bu, operatör izni en güçlü izindir, bütün yetkilerden önce gelir. o yüzden sizde zaten bu izin otomatik olarak olduğu için "Zaten SkyLord rütbesine sahipsin" mesajını gönderiyor. bu bir sorun değil, normal yani... :D

daha iyi anlaşılmak için şu kodu deneyin:

Kod:
command /rankatla:
    trigger:
        set {_level} to placeholder "Level_aoneblock_island_level" from player #%Level_aoneblock_island_level% < yer tutucusunu buraya ekliyoruz...
        set {_level} to {_level} parsed as number #in-line yapmadım çünkü hatırlamıyorum
        
        if {_level} >= 50:
            if player does not have permission "group.skylord":
                if player is not op:
                    execute console command "lp user %player% parent set skylord"
                    send "&aTebrikler! SkyLord rütbesine yükseldin!" to player
                else:
                    send "&cSiz zaten operatörsünüz, bütün rütbelere sahipsiniz!"
            else:
                send "&cZaten SkyLord rütbesine sahipsin!" to player
        else:
            send "&cSkyLord rütbesine yükselmek için en az 50 seviye olmalısın! (Şu anki seviyen: %{_level}%)" to player
 
çok teşekkür ederim skripteki hataları değil bide benim salaklıklarımı kapatıyorsunuz :D utandım şuan bir tık bide devam etmek için ne yapmam lazım skylord skyking skyzeus vs vs ayrı ayrı yazayımmı sizce
 
çok teşekkür ederim skripteki hataları değil bide benim salaklıklarımı kapatıyorsunuz :D utandım şuan bir tık bide devam etmek için ne yapmam lazım skylord skyking skyzeus vs vs ayrı ayrı yazayımmı sizce


ayrı ayrı yazmak derken, her rütbe için ayrı komut oluşturmaktan söz ediyorsan sadece gereksiz komutlar oluşturmuş olursun... bunun yerine kontrol sistemini genişletmen gerekiyor. mesela şöyle bi' örnek vereyim sen devamını getir ;)

buna örnek dedim de, bunu direk sunucuna ekle geç :D

komutlar (admin):
- /rankupadmin create (rankAdı) (seviye) (rank'ın sistemde görünecek adı veya prefix)
- /rankupadmin remove (rankAdı)
- /rankupadmin info (rankAdı)
- /rankupadmin list (bütün rankları görüntüle)
- /rankupadmin reset (hata yaparsanız, her şeyi başa almanız için :D fazla uğraşmadım)

komutlar (oyuncu):
- /rankup (bu komut, hem oyuncunun istatistiklerini görüntüler, hem de seviye atlamasını sağlar)

geliştirebileceğin bazı özellikler:
- menüler ile daha modern bir sistem
- seviye atladıkça ödül verme
- /is level komutunu takip ederek, beraberinde rütbesinin de güncellemesini sağlamak, bunun için ufak bir örnek;
Kod:
on command "is level":
    updatePlayerRank(event-player)
   
#bu fonksiyon boolean döner, yani seviye atlayabilir mi veya atlayamaz mı (true/false) olarak ayarladım. mesela:
#iki türlü de kullanabilirsin, daha sonrasında kodu geliştirmen için böyle function api'ler ekledim :)
   
on command "is level":
    updatePlayerRank(event-player) is false:
        send "&cSon seviye olduğunuz için seviyeniz kontrol edilmiyor!" to event-player

Herhangi bi' oyuncu verisi tutulmuyor, sadece rank kayıtları tutuluyor; yalnızca Skript-placeholder ve PlaceholderAPI gereklidir. Ben puan vs yazdım siz onu ada level olarak fln değiştirebilirsiniz.

heyhey.webp


hey! ya da güzel bir seviye atlama animasyonu :)

ezgif-59d1a0aa4cb3da.gif


yapman gereken bu skript'i ve gereksinimlerini yüklemek

JavaScript:
command rankup [<STRING>]:
    trigger:
        set {_p} to player

        {_p} is online:
            set {_next} to {skyblock::ranks::%{skyblock::ranks::%getPlayerRank({_p}, false)%::short} + 1%}
            send nl and " &f&l&m                                   " and nl to {_p}
            send "&7 - &fOyuncu: &e%{_p}%" to {_p}
            send "&7 - &fRütbe: &r%getPlayerRank({_p}, true)% &f&l>&r %colored {skyblock::ranks::%{_next}%::prefix} ? "&aYok"%" to {_p}
           
            nextLevel({_p}) is set: #eğer oyuncu son seviyeyse, artık bunları göstermenin anlamı yok :)
                send "&7 - &fPuan:&d %getPoint({_p})%" to {_p}
                send "&7 - &fGerekli puan: &e%getRequiredNextLevel({_p})%" to {_p}
                send "&7 - &fİlerleme: %progressBar(getPoint({_p}), 100, "|", 50, "&a&lBitti") ? "&cYok"%" to {_p}
            else:
                send "&7 - &dSon seviyesiniz ;)" to {_p}
               
            send nl and " &f&l&m                                   " to {_p}
            updatePlayerRank({_p})
        else:
            send "&cBöyle bir oyuncu bulunamadı/aktif değil!" to {_p}
           
command rankupadmin [<text>] [<text>] [<text>] [<text>]:
    permission: admin.rankup
    permission message: &cBu komutu kullanamazsın!
    trigger:
        set {_p} to sender
       
        arg 1 is "info":
            arg 2 is set:
                hasRank(arg 2) is true:
                    send nl and "&3[RANKS] &e%arg 2%&b adlı rütbenin bilgileri:" to {_p}
                    send "&7 - &fSıra: &d##%{skyblock::ranks::%arg 2%::short}%" to {_p}
                    send "&7 - &fİsim: &b%{skyblock::ranks::%arg 2%::name}%" to {_p}
                    send "&7 - &fPrefix: &d%colored {skyblock::ranks::%arg 2%::prefix}%" to {_p}
                    send "&7 - &fPuan: &a%{skyblock::ranks::%arg 2%::point}%" to {_p}
                    send "&7 - &fYetki: &agroup.%{skyblock::ranks::%arg 2%::name}%" and nl to {_p}
                   
                else:
                    send "&3[RANKS] &cBöyle bir rank bulunamadı!" to {_p}
                   
            else:
                send "&3[RANKS] &cLütfen bir rank adı girin!" to {_p}

        arg 1 is "create":
            arg 2 is set:
                hasRank(arg 2) is not set:
                    arg 3 is set:
                        arg 4 is set:
                            set {_lastCreatedRank} to "%{skyblock::ranks::%size of {skyblock::ranks::*}%} ? "Null"%"
                            {skyblock::ranks::%{_lastCreatedRank}%::point} ? 0 < (arg 3 parsed as number):
                                add arg 2 to {skyblock::ranks::*}
                                set {skyblock::ranks::%arg 2%::short} to size of {skyblock::ranks::*}
                                set {skyblock::ranks::%arg 2%::name} to arg 2
                                set {skyblock::ranks::%arg 2%::point} to (arg 3 parsed as number)
                                set {skyblock::ranks::%arg 2%::prefix} to arg 4
                               
                                send nl and "&3[RANKS] &e%arg 2%&b adlı rütbe oluşturuldu:" to {_p}
                                send "&7 - &fSıra: &d##%{skyblock::ranks::%arg 2%::short}%" to {_p}
                                send "&7 - &fİsim: &b%{skyblock::ranks::%arg 2%::name}%" to {_p}
                                send "&7 - &fPrefix: &d%colored {skyblock::ranks::%arg 2%::prefix}%" to {_p}
                                send "&7 - &fPuan: &a%{skyblock::ranks::%arg 2%::point}%" to {_p}
                                send "&7 - &fYetki: &agroup.%{skyblock::ranks::%arg 2%::name}%" and nl to {_p}
                               
                            else:
                                send "&3[RANKS] &cEklediğiniz rütbenin puanı, bir önceki rütbeden yüksek olmak zorunda!" to {_p}
                                send "&3[RANKS] &5Bir önceki rütbe: &d%{_lastCreatedRank}% &c|&6 Puanı:&e %{skyblock::ranks::%{_lastCreatedRank}%::point} ? 0%"
                               
                        else:
                            send "&3[RANKS] &cLütfen prefix'i girin!" to {_p}
                           
                    else:
                        send "&3[RANKS] &cLütfen gerekli puanı'ı girin!" to {_p}
                       
                else:
                    send "&3[RANKS] &cBu rank zaten mevcut!" to {_p}
                   
            else:
                send "&3[RANKS] &cLütfen bir rank adı girin!" to {_p}
               
        arg 1 is "remove":
            arg 2 is set:
                hasRank(arg 2) is true:
                    remove arg 2 from {skyblock::ranks::*}
                    delete {skyblock::ranks::%arg 2%::*}
                    send "&3[RANKS] &a%arg 2%&b silindi!" to {_p}
                   
                else:
                    send "&3[RANKS] &cBöyle bir rank bulunamadı!" to {_p}
                   
            else:
                send "&3[RANKS] &cLütfen bir rank adı girin!" to {_p}

        arg 1 is "reset":
            delete {skyblock::ranks::*}
            send "&3[RANKS] &aRütbeler sıfırlandı!" to {_p}
           
        arg 1 is "list":
            send nl and " &f&l&m                                   " and nl to {_p}
            loop {skyblock::ranks::*}:
                send "&f- &6%loop-value% &8|&e&o /%command% info %loop-value%" to {_p}
            send nl and " &f&l&m                                   " and nl to {_p}
           
function updatePlayerRank(p: PLAYER) :: BOOLEAN:

    nextLevel({_p}) is set:
        set {_point} to getPoint({_p})
        set {_needPoint} to getRequiredNextLevel({_p})
       
        {_point} >= {_needPoint}:
            execute console command "lp user %{_p}% parent set %nextLevel({_p})%"
           
            play sound "ENTITY_PLAYER_LEVELUP" with volume 0.5 to {_p}
            slidingText({_p}, "   Tebrikler, seviye atladın!", "&fYeni seviye: %getPlayerRank({_p}, true)%")
           
            return true
           
    return false

function nextLevel(p: PLAYER) :: STRING:
    return {skyblock::ranks::%{skyblock::ranks::%getPlayerRank({_p}, false)%::short} + 1%}
   
function hasRank(rank: STRING) :: BOOLEAN:
    return true if {skyblock::ranks::*} contains {_rank}

function getPoint(p: PLAYER) :: INTEGER:
    return placeholder "Level_aoneblock_island_level" from {_p} parsed as number
   
function getPlayerRank(p: PLAYER, state: BOOLEAN) :: STRING:

    loop reversed {skyblock::ranks::*}:
        {_p} has permission "group.%loop-value in lowercase%":
            return loop-value if {_state} is false, else colored {skyblock::ranks::%loop-value in lowercase%::prefix}

    return colored "&7default"
   
function getRequiredNextLevel(p: PLAYER) :: INTEGER:
    return {skyblock::ranks::%{skyblock::ranks::%{skyblock::ranks::%getPlayerRank({_p}, false)%::short} + 1%}%::point} - getPoint({_p}) ? 0

local function progressBar(current: INTEGER, total: INTEGER, symbol: STRING, size: INTEGER, fullBar: STRING) :: STRING:

    loop {_size} times:
        set {_progress} to "%{_progress} ? ""%%{_symbol}%"
       
    set {_full} to "%subtext of {_progress} from indices 1 to (({_current} / {_total}) * {_size} * (length of {_symbol})) ? ""%"
    set {_void} to "&7%subtext of {_progress} from indices (({_current} / {_total}) * {_size} * (length of {_symbol}))+1 to (length of {_progress}) ? " "%"
    {_current} >= {_total}:
        set {_full} to "||||||||||||||||||||||||||||||||||||||||||||||||||"
       
    return "%colored rainbow({_full}, 50, 0.5)%%{_void}%"  
   
local function slidingText(p: PLAYER, t: STRING, s: STRING):
   
    set {_length} to length of {_t}
    set {_displayLength} to 15
   
    loop {_length} times:
        (loop-value + {_displayLength}) is greater than {_length}:
            set {_display} to subtext of {_t} from loop-value to {_length}
        else:
            set {_display} to subtext of {_t} from loop-value to (loop-value + {_displayLength})
       
        set {_coloredDisplay} to rainbow({_display}, 40, 0.6)
       
        send title {_coloredDisplay} with subtitle {_s} to {_p} for 1 seconds with fadein 0 second and fade out 1 second
       
        wait 3 tick
   
    send title "&f" with subtitle "&f" to {_p} for 1 seconds

local function rainbow(input: STRING, wrapAmount: NUMBER = -1, lightness: NUMBER = 0.5) :: STRING:

    set {_delta} to 360 / ({_wrapAmount} if {_wrapAmount} > 0, else length of {_input})
 
    set {_lightnessModifier} to (({_lightness}*2)-1) * 255
    set {_angle} to 90
 
    loop length of {_input} times:
        set {_character} to character at loop-value in {_input}

        {_character} or (character at (loop-value - 1) in {_input}) is "§":
            "abcdefklmnor0123456789" contains {_character}:
                set {_format} to (join {_format} and "&%{_character}%") if {_character} is not "r", else ("")

            continue  

        loop 3 times:
            set {_n::%loop-value-2%} to (0.5 * (sin(({_angle} + (loop-number-2*120-120))) + 1)) * 255 + {_lightnessModifier}
        set {_output} to join {_output}, convertRGB({_n::*}), {_format} and {_character}
        remove {_delta} from {_angle}

    return colored {_output}
   
local function convertRGB(number: NUMBERS) :: STRING:
    loop {_number::*}:

        set {_r} to join {_r}, (character at (mod((floor(min(max(loop-value, 0), 255) / 16)), 16) + 1) in "0123456789ABCDEF") and (character at ((mod(min(max(loop-value, 0), 255), 16)) + 1) in "0123456789ABCDEF")

    return colored "<##%{_r}%>"


- Oluşabilecek hataları kaldırdım, kullanıcı dostu uyarılara sahip; hata yaptığın zaman neden kaynaklandığını sana gönderir.
- Yetki ve rütbe sistemini bu koda göre yeniden düzenlemeyi düşünebilirsin:
* "lp user %{_p}% parent set %nextLevel({_p})%" bu, oyuncunun seviye atladığı zaman; bir sonra ki seviyeye geçiş için panelden yürütülen komut. senin kodunda da buna benzer bi' şey vardı bu yüzden bunu kullanmanın mantıklı olabileceğini düşündüm :) yani, şu komut ile bir rank oluşturduğun zaman: /rankupadmin create skylord 1000 &6&lSky&eLord, panele gönderilecek olan komut şu olacaktır: "lp user Anemys parent set skylord" umuyorum buraya kadar anlamışsındır :) ayrıca seviye takibi methodunu yetkiye göre ayarladım, yani senin group.skylord (örnekten devam ediyorum) olarak her rütbeye bunun gibi group.(yetki adı) izinlerini vermen gerekiyor ki kod hatasız belasız çalışsın :)

function api'ler:
Kod:
updatePlayerRank(%player%) == true/false | oyuncunun geçebileceği seviye var mı yok mu veya güncelle
nextLevel(%player%) == has level check | bir sonra ki seviye var mı ?
hasRank(%string%) == has rank | bu rank var mı ?
getPoint(%player%) == island level | oyuncunun ada seviyesini döndürür
getPlayerRank(%player%, %boolean%) == raw name or colored name | rank'ın adını veya renkli adını döndürür
getRequiredNextLevel(%player%) == need island level | gerekli ada seviyesini döndürür.

Not: kod biraz karmaşık gelebilir, böyle yazmaya alıştığım için pek düzeltesim gelmedi açıkçası :) ayrıca; herhangi bir skyblock eklentisi ile test etmedim...
ÇOK ÖNEMLİ NOT: bunu yaparken çok keyif aldım, umarım sen de kullanırken aynı şekilde keyif alırsın <3

addons.webp
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst