Morrowind.BonusWeb.cz - neoficiální ceská fansite
Morrowind.BonusWeb.cz
Úvod
Tvorba Postavy
Výber Rasy
Výber Povolání
Skilly & Vlastnosti
Znamení
Artefakty
Alchymie
Bestiár
Bohové
Boj
Brnení
Daedry
Doprava
Frakce
Guildy
Herbár
Historie
Kradení
Magie
Nestvury
Obchod & Peníze
Ocarovávání
Otroci
Písmo & Jazyk
Upíri
Vlkodlaci
Trenéri
Zajímavosti Morrowindu
Zbrane
Hlavní Linie
Rod Hlaalu
Rod Redoran
Rod Telvani
Cech Bojovníku
Cech Mágu
Cech Zlodeju
Císarská Legie
Císarský Kult
Císarský Chrám
Morag Tong
Daedrické Svatyne
Upíri
Ostatní
Tribunal - Príbeh
Tribunal - Ostatní
Bloodmoon - Príbeh
Bloodmoon - E.E.C.
Úvod
Tvorba Pluginu
Scripty
Tutorial
Fórum
Návstevní Kniha
Pluginy
Mapy
Galerie
Wallpapery
Ruzné
Aréna Hrdinu
Povídky
Cheaty
Cestina
FAQ
The Elder Scrolls
Utajené Lokace
Archív Novinek
Odkazy
Autori

Nase ikonka:
TES III: Morrowind

SCRIPTY


  • Úvod do scriptování
  • Poznámky
  • Promenné
  • Nastavení promenných
  • Príkaz If
  • Príkaz While
  • Funkce
  • Formátování
  • Jak to dát vse dohromady!

     

    Úvod do scriptování

    Pouzití scriptu v Morrowind's Construction Set  umoznuje tvurcum pluginu vytvorit celou radu nových vecí ve hre, ale úspesné psaní scriptu muze být  dosti obtízné i pro zkuseného programátora. Scriptování v Morrowindu je omezené a ve srovnání s jinými hrami neprílis silné, ale i tak umoznuje vytvorit velkou spoustu skvelých vecí, kterými muzete puvodní hru obohatit.

        Zacínáte-li psát script otevrete Gameplay-Edit Scripts  v Editoru, vyberte Script-New a zacnete se samotným psaním. Asi takto:

        begin TestScript01

      end

     

    TestScript01 bude jméno vaseho nového scriptu a musí být unikátní ( ve hre nemuzou existovat scripty stejných jmen). K pridelení scriptu nejakému objektu otevrete u objektu editacní okno a vyberte vás nový script ze seznamu scriptu. Script muzete pridelit více objektum, ale musíte ho správne napsat.

     <nahoru>
     

    Základy psaní scriptu  

     

    Poznámky

    Vsechno po (;) v rádku bude ignorováno. Pouzívejte poznámky k popisu toho co vás script práve delá napr:

                         ; Odstraní mec z hrácova inventáre po 10 dnech

         if ( NumDays > 10 )

                 player->RemoveItem, "my_new_sword_01", 1

         endif

        

    <nahoru>
     

    Promenné

    Promenné jsou pouzívány pro interpretaci celé rady informací. Scripty v Morrowindu znají 3 druhy promenných:

     

    short : Celé císlo od  -32768 do 32767

    long : Celé císlo od -2,147,483,648 do 2,147,483,647

    float : Desetinné císlo 3.4e +/- 38 (7 míst)

     

    Je dobrým zvykem na pocátku scriptu vsechny pouzívané promenné deklarovat tzn:

       begin TestScript02

         short DaysPassed

         long  SecondsCalc

         float PlayerXPos

         ; etc...

      

    Takto pouzité promenné jsou chápány jako lokální promenné a nálezí k pridelenému objektu. Muzete také podobným zpusobem vytvorit globální promenné v Gameplay--Globals  menu v Editoru. Kazdá promenná je defaultne nastavena na 0.

     

    <nahoru>
     

    Nastavení promenných

    Pro nastavení hodnot globálních a lokálních promenných pozijte príkaz Set.           

         short DaysPassed

         long  SecondsCalc

         float PlayerXPos

     

         set DaysPassed to 0                             ; Pouzije presnou hodnotu

         set DaysPassed to ( DayPassed + Day )           ; Jednoduché scítání dvou promenných

         set SecondsCalc to ( DaysPassed * 86400 )       ; Násobené promenné a císla

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

         set objectID.varName to 100                     ; Nastaví promennou nálezící objektu.

         set "object ID".varName to 100                  ; Pouzívejte uvozovky pro ID objektu, ve kterém jsou mezery.

     

    Muzete nastavovat promenné jako presné hodnoty, jako dalsí globální/lokální promenné nebo aby vykonávaly jednoduché aritmetické operace (+, - , *, /). Muzete také pouzívat promenné nálezející jiným objektum pouzitím jména objektu, tecky a jména promenné

    <nahoru>
     

    Príkaz If

    If je príkaz, který vykoná nejakou akci pouze tehdy, jsou-li splneny definované podmínky napr:

         if ( DaysPassed <= 3 )

                 MessageBox, "Jeste neubehlo dost casu"

         elseif ( DaysPassed <= 10 )

                 MessageBox, "Urcený cas se blízí"

         else

                 MessageBox, "Cas práve nastal!"

         endif

      

    Samozrejme If muze zahrnovat více rádku a muze obsahovat dalsí príkazy If. K testování podmínek pouzívejte:

     

    ·        == : Rovná se

    ·        != : Nerovná se

    ·        < : Méne nez

    ·        > : Více nez

    ·        <= : Méne nebo rovno

    ·        >= : Více nebo rovno

    <nahoru>
     

    Príkaz While 

    WHILE se ve scriptování pouzívá méne nez If, ale i tak muze být v nekterých situacích potrebný napr:

         short Value

         set Value to 0

     

         while ( Value < 10 )   

                 MessageBox, "Odpocítávání %D...", Value

                 set Value to ( Value + 1 )

         endwhile

    <nahoru>
     

    Funkce

    Morrowind pouzívá pro zajistení behu  hry velké mnozství ruzných funkcí (seznam Script Functions </~uesp/morrow/editor/mw_cscommands.shtml>   ). 

         MessageBox, "Vítejte do scriptování..."         ; Zobrazí text hráci

         if ( player->GetPos, X > 100 )                  ; Testuje hrácovu pozici

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

      

     

    Detailní popis jednotlivých funkcí a jejich pouzití najdete v Helpu v Editoru ve Functions. K pochopení jejich funkce se podívejte také na jiz existující scripty ve hre.

    Pamatujte ale, ze ne vsechno co je napsáno v Helpu, je správne. Také si musíte uvedomit, co které funkce pozadují jako vstup.

         float XPos

         set XPos to -10

         AiTravel,  -10, 1000, 501, 0    ; Presné hodnoty jsou bez problému

         AiTravel, XPos, 1000, 501, 0    ; Promenné nejsou akceptovány

         SetPos, X, XPos                 ; Funguje, jelikoz SetPos akceptuje promenné (Tribunal)

      

    U popisu vetsiny funkcí v Helpu najdete, zda akceptují promenné (vetsinou ne).

     

    <nahoru>
     

    Formátování

    Puozití správného formátování ve scriptu je dulezité pro jeho fungování. Engine Morrowindu má casto problémy s vecmi jako mezery a cárky aj.

    Pouzívejte tedy ve scritpu tento postup.

     

         if ( SomeValue == 1 )                   ; 1, pouzívejte mezery pred/za závorkami v príkazech

                 AiActivate, ObjectID, 0         ; 2, pouzívejte cárky pri volání funkcí

         endif

     

         "urzul gra-agum"->Enable                ; 3, pouzívejte uvozovky u ID, které obsahuje mezery

      

    Dávejte mezery pred/za závorkami v príkazech. Pokud to neudeláte, muzete dostat chybové hlásení. Pouzívejte také mezery u  =,>,<,... v If príkazu.

    Vzdy pouzívejte cárky pri volání funkcí (po jménu funkce a po kazdém parametru krome posledního). Morowind umoznuje volání funkcí bez cárek, ale s nima je to jistejsí.

    Pokud ID nejakého objektu obsahuje mezery, pouzijte u neho uvozovky.

     <nahoru>
     

    Jak to dát vse dohromady!

    Predchozí cást byla jen základem pro vysvetlení tvorby scriptu v Morrowindu, ale jediná cesta jak se to správne naucit je psaní vlastních scriptu. Následující script je relativne krátký a jednoduchý. Pokud jej dáte napr. na truhlu, tak ta se otevre pouze tehdy, má-li hrác v inventári urcitý objekt. Pokud nemá, tak objekt spustí past v síle, která závisí na hrácove levelu.

       begin TrickChestScript

         short OpenAttempt

      

                 ; Testuje, zda hrác zkousí otevrít truhlu. Pouzijte funkci OpenAttempt,jelikoz dávat vse do OnActivate If   

                 ; príkazu by bylo obtíznejsí u komplexnejsích scriptu.

         if ( OnActivate == 1 )

                 set OpenAttempt to 1

         end if

     

                 ; Pokud se hrác nepokousí otevrít truhlu, script se zastaví.

         if ( OpenAttempt == 0 )

                 return

         endif

     

                 ; Testuje, zda má hrác ve svém inventári onen tajný klíc. V nasem prípade je to 10 polstáru.

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

     

                 Activate                ; Otevre normálne truhlu

                 Set OpenAttempt to 0

                 MessageBox, "The chest opens mysteriously..."

     

                 ; Hrác nemá 10 polstáru a truhla aktivuje past.

         else

                 PlaySound3D, "Heavy Armor Hit"          ; Hraje nejaký zvuk

                 Set OpenAttempt to 0

     

                         ; Sesle na hráce kouzlo v síle závislé na levelu hráce.

                 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 máme za potvurku?
    Copak to tady máme za potvurku?
    celkem hlasu: 12572

    Onsi
    Lorkhan
    Alkosh
    Lizard Warrior
    Akatosh
    Jhunal

    Výsledky kvízu

    Nakupujete zbozí pres internetové obchody?
    celkem hlasu: 6369


    Jenom tam, v nasí vecerce jsem nebyl uz roky 637
    Tak pul na pul 2363
    Jenom obcas, vánoce, promoce a tak 1822
    Jednou jsem to zkusil a nechytlo me to 418
    Co? Jaký internety? 1129

    Výsledky anket

    Tricka s potiskem | Kosmetika a parfémy | Zdravá výziva | Móda a módní trendy 2009 | Seznam stránek
    Powered by Genesis 2| Hosted by BonusWeb | Arena | Daggerfall | Morrowind | Oblivion