Skript: Standard Skript Code Conventions (SSCC)

Z skript.pl wiki
Skocz do: nawigacja, szukaj


Co to jest SSCC?[edytuj]

SSCC (Standard Skript Code Conventions) jest zestawem reguł pisania skryptów stworzonym przez użytkownika destroyer4017. Określa on styl kodowania, który zapewnia kompatybilność z innymi skryptami, łatwość utrzymania/modyfikowania kodu oraz sprawia, że skrypt jest prosty do odczytania.

Nazwy plików[edytuj]

Nazwy plików z rozszerzeniem .sk nie powinny zawierać następujących znaków:

  1. `
  2. $
  3. %
  4. { oraz }
  5.  (spacji)

Jeśli w nazwie chcesz zawrzeć wersję skryptu, powinna ona znaleźć się na końcu - za nazwą skryptu. Na przykład: skrewards-v1.2.3.sk

Nazwy zmiennych[edytuj]

Poniższe zasady odnoszą się tylko do zmiennych globalnych, nie do lokalnych (zaczynających się od _).
Nazwy zmiennych powinny być zapisane według konwencji camelCase, gdzie nie występują spacje oraz pierwsza litera każdego słowa (wyłączając pierwsze) zaczyna się z wielkiej litery. Zmienne tworzone przez skrypt powinny być definiowane w sposób {<nazwa skryptu>::<nazwa zmiennej>}, co ułatwia usuwanie danych danego skryptu albo aktualizowanie zmiennych z wcześniejszej wersji skryptu, na przykład:

Zamiast takiej zmiennej:
  {current.reward}
Użyj następującego wzoru:
  {skrewards::currentReward}

Zmienne dynamiczne oraz listy powinny być stopniowane, co jest bardziej obiektowym podejściem i umożliwia zapętlanie danych:

Zamiast takich zmiennych:
  {reward.level.modifier.1}
  {reward.level.modifier.2}
  {reward.level.modifier.3}
  {rewardstatus.%player%}
  {info.%player%.mined.diamonds}
  {info.%player%.mined.emeralds}
Użyj następujących wzorów:
  {skrewards::rewardLevelModifier::1}
  {skrewards::rewardLevelModifier::2}
  {skrewards::rewardLevelModifier::3}
  {skrewards::rewardStatus::%player%}
Można też to zrobić w inny sposób:
  {skrewards::info::%player%::minedDiamonds}
  {skrewards::info::%player%::minedEmeralds}
lub:
  {skrewards::info::%player%::mined::diamonds}
  {skrewards::info::%player%::mined::emeralds}

Jeśli piszesz API, powinieneś wpisać dane do zarezerwowanych nazw zmiennych {<nazwa skryptu>::api::<output ID>}. Jeśli używasz skQuery, możesz zapisywać dane do tych zmiennych, gdy podprogram/funkcja jest wykonywany/a. W zwykłym Skript powinieneś zdeklarować komendy możliwe do użycia tylko z konsoli, które wpisują dane do tych zmiennych. Schemat ten pozwala twórcom skryptów, tworząc własny skrypt pozyskiwać informacje z innych. Jeśli Twój skrypt jest biblioteką, której jedynym celem jest udostępnienie funkcji, należy wtedy pominąć fragment ::api i używać {<nazwa skryptu>::<output ID>}. Zmienne API powinny być usunięte zawsze, gdy serwer jest wyłączany.

Porządkowanie kodu[edytuj]

Stworzony kod musi być uporządkowany w określony sposób. Nie powinieneś wpisywać zdarzeń i komend w losowej kolejności; muszą być czytelnie oddzielone. Każdy z elementów może być pominięty, o ile są one w odpowiedniej kolejności:

  1. script options (jeśli używasz skQuery)
  2. aliasy - aliases:
  3. zmienne - variables:
  4. opcje - options:
  5. podprogramy/funkcje (jeśli używasz skQuery)
  6. nowe komendy - command /komenda:
  7. ładowanie skryptu - on script load:
  8. odładowanie skryptu - on script unload:
  9. okresowe zdarzenia (np. every 10 seconds, at 10:00)
  10. inne zdarzenia

Zdarzenia i warunki[edytuj]

Zdarzenia zawsze powinny zaczynać się od słówka on, mimo że będą działać bez niego. Kiedy tylko to możliwe, powinieneś unikać używania selektorów w linii definiującej zdarzenie, np.:

on right click with porkchop:
on left click on tnt:
on damage of cow:

Należy uogólnić takie zdarzenia i skorzystać z warunków:

on right click:
    if tool of player is porkchop:
        # dalszy kod
on left click:
    if clicked block is tnt:
        # dalszy kod
on damage:
    if victim is a cow:
        # dalszy kod

Stosując warunki, nigdy nie powtórzysz tego samego zdarzenia kilka razy w jednym skrypcie. Warunki powinny zawsze zaczynać się od słówka if i kończyć dwukropkiem. Nigdy nie używaj warunków bez wprowadzenia dalszego kodu do ich wnętrza. To pozwoli twórcom skryptów w łatwy sposób dodać kod przed i po warunku albo dodać else::

Zamiast:
  on damage:
      if victim is a player:
          {skrewards::info::%victim%::isInvincible} is true
          cancel event
          set {skrewards::info::%victim%::isInvincible} to false
Użyj takich warunków:
  on damage:
      if victim is a player:
          if {skrewards::info::%victim%::isInvincible} is true:
              cancel event
              set {skrewards::info::%victim%::isInvincible} to false

Specyfikacja Lambdy[edytuj]

Lambdy są nową funkcją skQuery i mogą być używane we wszystkich wersjach powyżej 1.17.0. Pozwalają sporą ilość kodu skompresować do kilku linii. Lambdy, tak długo, jak długo będą używane rozsądnie, będą spełniać wymagania SSCC. Mogą one być brane pod uwagę, jeśli:

  1. Użyte są zamiast funkcji do wykonania pojedynczego zadania
  2. Użyte są do zaciemnienia kodu przez stworzenie bardzo skompresowanego kodu
  3. Lepiej opisują ciąg zadań

Oznaczanie zgodności z SSCC[edytuj]

Jeśli stosujesz się do tych zasad, umieść w publikacji swojego skryptu plakietkę: Sscc.png
Linki i kody do:

  1. oryginalnego tematu:
    • Link: http://dev.bukkit.org/bukkit-plugins/skript/forum/tutorials/69108/
    • BBCode: [url=http://dev.bukkit.org/bukkit-plugins/skript/forum/tutorials/69108/][img=https://wiki.skript.pl/images/sscc.png][/url]
    • HTML: <a href="http://dev.bukkit.org/bukkit-plugins/skript/forum/tutorials/69108/"><img src="https://wiki.skript.pl/images/sscc.png"></a>
  2. oficjalnego polskiego tematu:
    • Link: https://skript.pl/temat/1877-standard-skript-code-conventions-r3/
    • BBCode: [url=https://skript.pl/temat/1877-standard-skript-code-conventions-r3/][img=https://wiki.skript.pl/images/sscc.png][/url]
    • HTML: <a href="https://skript.pl/temat/1877-standard-skript-code-conventions-r3/"><img src="https://wiki.skript.pl/images/sscc.png"></a>
  3. artykułu na wiki.skript.pl:
    • Link: https://wiki.skript.pl/Skript:Standard_Skript_Code_Conventions
    • BBCode: [url=https://wiki.skript.pl/Skript:Standard_Skript_Code_Conventions][img=https://wiki.skript.pl/images/sscc.png][/url]
    • HTML: <a href="https://wiki.skript.pl/Skript:Standard_Skript_Code_Conventions"><img src="https://wiki.skript.pl/images/sscc.png"></a>