Morrowind.valkovic.cz - neoficialni ceska fansite
Morrowind.valkovic.cz
Uvod
Tvorba Postavy
Vyber Rasy
Vyber Povolani
Skilly & Vlastnosti
Znameni
Artefakty
Alchymie
Bestiar
Bohove
Boj
Brneni
Daedry
Doprava
Frakce
Guildy
Herbar
Historie
Kradeni
Magie
Nestvury
Obchod & Penize
Ocarovavani
Otroci
Pismo & Jazyk
Upiri
Vlkodlaci
Treneri
Zajimavosti Morrowindu
Zbrane
Hlavni Linie
Rod Hlaalu
Rod Redoran
Rod Telvani
Cech Bojovniku
Cech Magu
Cech Zlodeju
Cisarska Legie
Cisarsky Kult
Cisarsky Chram
Morag Tong
Daedricke Svatyne
Upiri
Ostatni
Tribunal - Pribeh
Tribunal - Ostatni
Bloodmoon - Pribeh
Bloodmoon - E.E.C.
Uvod
Tvorba Pluginu
Scripty
Tutorial
Forum
Navstevni Kniha
Pluginy
Mapy
Galerie
Wallpapery
Ruzne
Arena Hrdinu
Povidky
Cheaty
Cestina
FAQ
The Elder Scrolls
Utajene Lokace
Archiv Novinek
Odkazy
Autori

Nase ikonka:
TES III: Morrowind

SCRIPTY


  • Uvod do scriptovani
  • Poznamky
  • Promenne
  • Nastaveni promennych
  • Prikaz If
  • Prikaz While
  • Funkce
  • Formatovani
  • Jak to dat vse dohromady!

     

    Uvod do scriptovani

    Pouziti scriptu v Morrowind's Construction Set  umoznuje tvurcum pluginu vytvorit celou radu novych veci ve hre, ale uspesne psani scriptu muze byt  dosti obtizne i pro zkuseneho programatora. Scriptovani v Morrowindu je omezene a ve srovnani s jinymi hrami neprilis silne, ale i tak umoznuje vytvorit velkou spoustu skvelych veci, kterymi muzete puvodni hru obohatit.

        Zacinate-li psat script otevrete Gameplay-Edit Scripts  v Editoru, vyberte Script-New a zacnete se samotnym psanim. Asi takto:

        begin TestScript01

      end

     

    TestScript01 bude jmeno vaseho noveho scriptu a musi byt unikatni ( ve hre nemuzou existovat scripty stejnych jmen). K prideleni scriptu nejakemu objektu otevrete u objektu editacni okno a vyberte vas novy script ze seznamu scriptu. Script muzete pridelit vice objektum, ale musite ho spravne napsat.

     <nahoru>
     

    Zaklady psani scriptu  

     

    Poznamky

    Vsechno po (;) v radku bude ignorovano. Pouzivejte poznamky k popisu toho co vas script prave dela napr:

                         ; Odstrani mec z hracova inventare po 10 dnech

         if ( NumDays > 10 )

                 player->RemoveItem, "my_new_sword_01", 1

         endif

        

    <nahoru>
     

    Promenne

    Promenne jsou pouzivany pro interpretaci cele rady informaci. Scripty v Morrowindu znaji 3 druhy promennych:

     

    short : Cele cislo od  -32768 do 32767

    long : Cele cislo od -2,147,483,648 do 2,147,483,647

    float : Desetinne cislo 3.4e +/- 38 (7 mist)

     

    Je dobrym zvykem na pocatku scriptu vsechny pouzivane promenne deklarovat tzn:

       begin TestScript02

         short DaysPassed

         long  SecondsCalc

         float PlayerXPos

         ; etc...

      

    Takto pouzite promenne jsou chapany jako lokalni promenne a nalezi k pridelenemu objektu. Muzete take podobnym zpusobem vytvorit globalni promenne v Gameplay--Globals  menu v Editoru. Kazda promenna je defaultne nastavena na 0.

     

    <nahoru>
     

    Nastaveni promennych

    Pro nastaveni hodnot globalnich a lokalnich promennych pozijte prikaz Set.           

         short DaysPassed

         long  SecondsCalc

         float PlayerXPos

     

         set DaysPassed to 0                             ; Pouzije presnou hodnotu

         set DaysPassed to ( DayPassed + Day )           ; Jednoduche scitani dvou promennych

         set SecondsCalc to ( DaysPassed * 86400 )       ; Nasobene promenne a cisla

         set PlayerXPos to ( player->GetPos, X )         ; Pouzije funkci

         set objectID.varName to 100                     ; Nastavi promennou nalezici objektu.

         set "object ID".varName to 100                  ; Pouzivejte uvozovky pro ID objektu, ve kterem jsou mezery.

     

    Muzete nastavovat promenne jako presne hodnoty, jako dalsi globalni/lokalni promenne nebo aby vykonavaly jednoduche aritmeticke operace (+, - , *, /). Muzete take pouzivat promenne nalezejici jinym objektum pouzitim jmena objektu, tecky a jmena promenne

    <nahoru>
     

    Prikaz If

    If je prikaz, ktery vykona nejakou akci pouze tehdy, jsou-li splneny definovane podminky napr:

         if ( DaysPassed <= 3 )

                 MessageBox, "Jeste neubehlo dost casu"

         elseif ( DaysPassed <= 10 )

                 MessageBox, "Urceny cas se blizi"

         else

                 MessageBox, "Cas prave nastal!"

         endif

      

    Samozrejme If muze zahrnovat vice radku a muze obsahovat dalsi prikazy If. K testovani podminek pouzivejte:

     

    ·        == : Rovna se

    ·        != : Nerovna se

    ·        < : Mene nez

    ·        > : Vice nez

    ·        <= : Mene nebo rovno

    ·        >= : Vice nebo rovno

    <nahoru>
     

    Prikaz While 

    WHILE se ve scriptovani pouziva mene nez If, ale i tak muze byt v nekterych situacich potrebny napr:

         short Value

         set Value to 0

     

         while ( Value < 10 )   

                 MessageBox, "Odpocitavani %D...", Value

                 set Value to ( Value + 1 )

         endwhile

    <nahoru>
     

    Funkce

    Morrowind pouziva pro zajisteni behu  hry velke mnozstvi ruznych funkci (seznam Script Functions </~uesp/morrow/editor/mw_cscommands.shtml>   ). 

         MessageBox, "Vitejte do scriptovani..."         ; Zobrazi text hraci

         if ( player->GetPos, X > 100 )                  ; Testuje hracovu pozici

         if ( "achel"->GetSpell, "ash woe blight" == 1 ) ; Testuje, zda-li NPC nema nemoc    

      

     

    Detailni popis jednotlivych funkci a jejich pouziti najdete v Helpu v Editoru ve Functions. K pochopeni jejich funkce se podivejte take na jiz existujici scripty ve hre.

    Pamatujte ale, ze ne vsechno co je napsano v Helpu, je spravne. Take si musite uvedomit, co ktere funkce pozaduji jako vstup.

         float XPos

         set XPos to -10

         AiTravel,  -10, 1000, 501, 0    ; Presne hodnoty jsou bez problemu

         AiTravel, XPos, 1000, 501, 0    ; Promenne nejsou akceptovany

         SetPos, X, XPos                 ; Funguje, jelikoz SetPos akceptuje promenne (Tribunal)

      

    U popisu vetsiny funkci v Helpu najdete, zda akceptuji promenne (vetsinou ne).

     

    <nahoru>
     

    Formatovani

    Puoziti spravneho formatovani ve scriptu je dulezite pro jeho fungovani. Engine Morrowindu ma casto problemy s vecmi jako mezery a carky aj.

    Pouzivejte tedy ve scritpu tento postup.

     

         if ( SomeValue == 1 )                   ; 1, pouzivejte mezery pred/za zavorkami v prikazech

                 AiActivate, ObjectID, 0         ; 2, pouzivejte carky pri volani funkci

         endif

     

         "urzul gra-agum"->Enable                ; 3, pouzivejte uvozovky u ID, ktere obsahuje mezery

      

    Davejte mezery pred/za zavorkami v prikazech. Pokud to neudelate, muzete dostat chybove hlaseni. Pouzivejte take mezery u  =,>,<,... v If prikazu.

    Vzdy pouzivejte carky pri volani funkci (po jmenu funkce a po kazdem parametru krome posledniho). Morowind umoznuje volani funkci bez carek, ale s nima je to jistejsi.

    Pokud ID nejakeho objektu obsahuje mezery, pouzijte u neho uvozovky.

     <nahoru>
     

    Jak to dat vse dohromady!

    Predchozi cast byla jen zakladem pro vysvetleni tvorby scriptu v Morrowindu, ale jedina cesta jak se to spravne naucit je psani vlastnich scriptu. Nasledujici script je relativne kratky a jednoduchy. Pokud jej date napr. na truhlu, tak ta se otevre pouze tehdy, ma-li hrac v inventari urcity objekt. Pokud nema, tak objekt spusti past v sile, ktera zavisi na hracove levelu.

       begin TrickChestScript

         short OpenAttempt

      

                 ; Testuje, zda hrac zkousi otevrit truhlu. Pouzijte funkci OpenAttempt,jelikoz davat vse do OnActivate If   

                 ; prikazu by bylo obtiznejsi u komplexnejsich scriptu.

         if ( OnActivate == 1 )

                 set OpenAttempt to 1

         end if

     

                 ; Pokud se hrac nepokousi otevrit truhlu, script se zastavi.

         if ( OpenAttempt == 0 )

                 return

         endif

     

                 ; Testuje, zda ma hrac ve svem inventari onen tajny klic. V nasem pripade je to 10 polstaru.

         if ( player->GetItemCount, "misc_uni_pillow_01" >= 10 )

     

                 Activate                ; Otevre normalne truhlu

                 Set OpenAttempt to 0

                 MessageBox, "The chest opens mysteriously..."

     

                 ; Hrac nema 10 polstaru a truhla aktivuje past.

         else

                 PlaySound3D, "Heavy Armor Hit"          ; Hraje nejaky zvuk

                 Set OpenAttempt to 0

     

                         ; Sesle na hrace kouzlo v sile zavisle na levelu hrace.

                 if ( player->GetLevel < 10 )

                         Cast, "poisontrap_10", Player

                 elseif ( player->GetLevel < 25 )

                         Cast, "poisontrap_50", Player

                 elseif ( player->GetLevel < 50 )

                         Cast, "poisontrap_150", Player

                 else

                         Cast, "poisontrap_250", Player

                 endif

                

         endif

       end

    <nahoru>
     




  • E-shop za 15 minut

    Copak to tady mame za potvurku?
    Copak to tady mame za potvurku?
    celkem hlasu: 20965

    Onsi
    Lorkhan
    Alkosh
    Lizard Warrior
    Akatosh
    Jhunal

    Vysledky kvizu

    Nakupujete zbozi pres internetove obchody?
    celkem hlasu: 9899


    Jenom tam, v nasi vecerce jsem nebyl uz roky 961
    Tak pul na pul 3609
    Jenom obcas, vanoce, promoce a tak 2823
    Jednou jsem to zkusil a nechytlo me to 630
    Co? Jaky internety? 1876

    Vysledky anket

    Tricka s potiskem | Kosmetika a parfemy | Zdrava vyziva | Moda a modni trendy 2009 | Seznam stranek
    Powered by Genesis 2| Hosted by BonusWeb | Arena | Daggerfall | Morrowind | Oblivion