Jak psat script

Aneb stabni kultura neni jen buzerace…

  • Zvolte si jakoukoli primerenou konvenci odsazovani a oddelovaci znak (tabulator, nebo 4 mezery apod.), a to dodrzujte jednotne v ramci celeho scriptu
  • Piste kod prehledne. Kdyz pisete if, ktery ma nejakou cast dlouhou, prvne osetrete kratke vyjimky. Neni nic neprijemnejsiho, nez za 10 stranek dlouhym blokem dohledavat else a ktere je to prave.
  • Misto retezce if (x==1) .. else (x==2) … pouzivejte radsi switch (x) { case y: … }.
  • Zakladni funkcni bloky nebo slozitejsi podminky primerene komentujte, pokud neni smysl zrejmy napr. z dialogu.
  • Na zacatku popiste, ktere promenne a quest_id vyuzivate, co vlastne obsahuji.
  • Uklizejte po sobe, promenne ktere nebudete pouzivat vynulujte, aby nezabiraly zbytecne misto.
  • U kazdeho dialogu myslete na neobvykle situace:
    • Co kdyz soucasne bude klikat nekdo jiny?
    • Co kdyz v polovine dialogu hrac odlogne nebo odportne deckem apod.?
    • Co kdyz udela hrac chybu, je cesta zpet?
  • Zejmena: VZDY, VZDY a jeste jednou VZDY nastaveni promenne na dalsi krok questu, smazani sezranych itemu a vytvoreni novych delejte v jednom kroku presne v tomto poradi! Uvedomte si, ze pokud vznikne nejaka chyba, script nepokracuje, takze vznikne snadno generator itemu zadarmo.
  • Osetrujte i chyby, ktere „nemohou nastat“.
  • Pokud nekde mazete nebo vytvarite itemy, VZDY dejte do komentare o jaky item se jedna (napr. 3xOBB)

Mozna konvence odsazovani, kterou pouzivam ja (z realneho NPC, jen je pridana zbytecna sekce OnInit), vypada nasledne:

amatsu,143,148,3	script	Kseftar#jirkan	118,{    // povinny format, zde neni co resit
	mes "[Kseftar]";                                 // standardni odsazeni jeden tabelator, v levem sloupci je jen definice NPC, jeji ukonceni a pripadne eventy
	if (!countitem(677)) {                           // slozena zavorka ktera otevira vnoreny blok na konci radku
		mes "Vypadni socko, kazis mi ksefty!";   // samotny blok je odsazeny o dalsi tabelator
		mes "Az budes mit bony prijd";
		close;
	}                                                // uzaviraci zavorka je presne pod prikazem ktery blok otevrel
	mes "psssst!";                                   // dalsi kod bez bloku pokracuje dal.
	mes "hele, ty vypadas bohate, udelame obchod?";
	next;
	mes "[Kseftar]";
	mes "Tak ja ti jako pujcim nejakej klip a ty mi zaplatis, co ty na to?";
	if (2 != prompt("Tahni drbane!:A co nabizis?")) close;       // na jeden radek pouze ty nejjednodussi konstrukce za if, cokoli slozitejsiho do samostatnych bloku
	next;
	mes "[Kseftar]";
	mes "Mam tu tyhle ctyri klipy, pujcim ti je na 2 hodiny a ty mi za to das jeden bon, plati?";
	switch (select("Healing Clip:Hiding Clip:Clip Under a Cast:Clairvoyant Clip:Nic nechci")) {  // switch podobne jako if, zacatek bloku na konci radky
		case 1:                                // varianty case odsazene o jeden tab
			delitem 677,1;                 // ale samotny kod je od case opet odsazeny, aby bylo poznak kde ktera sekce konci
			rentitem 10600,7200;
			break;
		case 2:                                // vynechavat radek nebo nevynechavat? tot otazka, na jednu
			delitem 677,1;                 // kdyz vynechame, je to prehlednejsi, ale zase se min vejde
			rentitem 10601,7200;           // na obrazovku takze se hur orientuje
			break;
		case 3:
			delitem 677,1;
			rentitem 10602,7200;
			break;
		case 4:
			delitem 677,1;
			rentitem 10603,7200;
			break;
                                                       // takze jsem vynechal radku az u podstatne zmeny
		default:                               // vzdy nejak osetrujeme i volby ktere nemusi nastat
			mes "Tak priste";
			break;                         // tenhle break je nadbytecny, ale na druhou stranu clovek pri dalsim copypastovani nezavlece chybu
	}
	close;

OnInit:                                                // event jako jediny krome konce od prvniho sloupce
        npctalk "Tak me tu mate!";                     // a kod zase klasicky odsazeny
        end;

}

Poznamka: V tomto scriptu nedodrzuji to, ze delitem a getitem by mely mit popsane co zerou/davaji. Cinim tak protoze je to zrejme z kontextu par radku kolem (zarucene na jedne obrazovce) o jake predmety se jedna.

j_vlastni_script.txt · Poslední úprava: 2016/08/20 14:33 (upraveno mimo DokuWiki)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki