IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

3. diel - Skript - Cykly

Cykly - o tom dnes budeme hovoriť. Vo Skriptu je to vlastne časť kódu, ktorá opakuje nejakú akciu pre nejaké hodnoty. Typický štýl kódu vyzerá takto:

loop <výraz>:
  <podmínky>
  <účinek>

Takže si to rozoberieme:

  • Prvá časť kódu (loop <výraz>) musí mať v mieste pre výraz taký výraz, ktorý vráti viac hodnôt (napr. All players - všetci hráči).
  • Druhá časť, tá ktorá využije cyklu, hodnota z cyklu sa značí premennou %loop-value%

Ale kde sa takéto cykly dajú využiť? Prakticky je to pomerne častá časť skriptov. Dá sa využiť v mnohých prípadoch, napríklad pri výpise všetkých hráčov, nejaké premenné typu zoznam (list variable) a ďalších hodnôt.

My si teraz skúsime vytvoriť jednoduchý skript na vypísanie online hráčov.

command /list: #Deklarace příkazu list
  trigger:
    send "&e&lList online hráčů:" to player
    loop all players: #Do cyklu vložíme hodnotu "all players" (všichni hráči)
      send "&7%loop-value%" to player #Vypsání hodnoty z cyklu
Skript - Minecraft modding bez Javy

Rovnakým spôsobom napríklad môžeme rozoslať správu všetkým hráčom - loopneme je a potom necháme konať príkaz send "zpráva" to loop-player. Ako príklad môže poslúžiť ukážka z AlertSK (zjednodušená):

command /alert [<text>]:
  trigger:
    if player has permission "alertsk.alert":
      loop all players:
        set {alertmsg} to colored arg-1 #Pro správné kódování zprávy
        send "&4&lAlert: &7%{alertmsg}%" to loop-player
        delete {alertmsg}
    else:
      send "&cNope."

V praxi by sme miesto takéhoto cyklu mohli jednoducho použiť príkaz "broadcast", však chcel som predviesť ako by to šlo len pomocou príkazu send a cyklu. Verzia s broadcast by bola:

broadcast "zpráva"

Prechádzanie premenných

Pomocou cyklov môžeme prechádzať prvky premennej, ktorá je typu zoznam a obsahuje viac ako jednu hodnotu - takým premenlivým vo Skriptu hovoríme list variable.

Môžeme si teda napríklad do jednej list variable zaskladovat hráčov, ktorí dostali ban, členmi adminteamu alebo zakázané itemy. My si urobíme skripty na zakázané itemy.

Najprv si musíme pripraviť príkaz, ktorým zakázaný item vložíme do listu:

command /zakazat:
  trigger:
    if {zakazane::*} is player's tool: #Jestliže již item je na seznamu...
      send "&e%player's tool% &abyl odebrán ze seznamu zakázaných itemů"  # tak jej z něj odebereme
      remove player's tool from {zakazane::*}
    else:
      set {zakazane::*} to player's tool #Přidání itemu v hráčově ruce do zakázaných
      send "&e%player's tool% &abyl přidán do seznamu zakázaných itemů" to player

A ďalej teda vytvoríme samotný systém na detekciu zakázaných itemov - prejdeme všetkých hráčov, potom ich inventára a zakázané itemy vymastíme a zalogujeme:

command /list: #Deklarace příkazu
  trigger:
    send "&e&lList online hráčů:" to player
    loop all players: #Do cyklu vložíme hodnotu "all players" (všichni hráči)
      send "&7%loop-value%" to player #Vypsání hodnoty z cyklu

command /zakazat:
  trigger:
    if {zakazane::*} is player's tool: #Jestliže již item je na seznamu...
      send "&e%player's tool% &abyl odebrán ze seznamu zakázaných itemů"  # tak jej z něj odebereme
      remove player's tool from {zakazane::*}
    else:
      set {zakazane::*} to player's tool #Přidání itemu v hráčově ruce do zakázaných
      send "&e%player's tool% &abyl přidán do seznamu zakázaných itemů" to player

every 1 seconds in "world": #Každou jednu sekundu
  loop all players: #Zacyklíme všechny hráče
    loop items in loop-player's inventory: #Zacyklíme inventář hráče z předchozího cyklu
      if loop-item is {zakazane::*}:     # Kontrola jestli zacyklený item není zakázaný
        if loop-player has permission "zakazaneitemy.ignore": #Důležité - vhodné pro adminy, ať jim to nemaže zakázané itemy
          stop
        else:
          log "ZAKAZANY ITEM | HRAC: %loop-player% | ITEM: %loop-item% | DATUM: %now%" to file "zakazaneitemy.log" # a zaloguje se to do souboru zakazaneitemy.log
          remove loop-item from the loop-player    #Jestliže je, tak se smaže...
          send "&cVe tvém inventáři byl objeven item &e%loop-item%&c, který je na seznamu zakázaných itemů!" to loop-player  #Hráčovi se pošle zpráva..

Výsledok v hre:

Skript - Minecraft modding bez Javy

Výsledok v logu:

Skript - Minecraft modding bez Javy

Pozor - logy sa musí zobrazovať v PSPad-u, Notepad ++ - u alebo iných programoch, pri zobrazení v poznámkovom bloku sa všetko zobrazí v jednom riadku a nejde to prečítať!

No dobre, toto je zaujímavé. Ale čo potom vlastné warpsystém? Alebo /killall príkaz? Trebárs aj kompletné bansystem, každopádne toto všetko (a ešte oveľa viac) ide pomocou cyklov vytvoriť.

V budúcej lekcii už by sme mohli začať pracovať s prvými addony, predstaviť si ich funkcie a využitie.

Všetky kódy ukázané v tomto skriptu nájdete tu: https://pastebin.com/T79hUasg


 

Predchádzajúci článok
Skript - podmienky a argumenty
Všetky články v sekcii
Skript - Minecraft modding bez Javy
Preskočiť článok
(neodporúčame)
Skript - SkAddony - SkQuery
Článok pre vás napísal 205nd
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje primárně Skriptu, z menší části umí i HTML a naprosté základy PHP.
Aktivity