Funkce a příkazy skriptu
Postupně překládaný popis skriptovacích příkazu eAtheny z eathena\doc\script_commands.txt. Zatím jsem skončil u hideoffnpc, a ne u všech je přeložený popis. Tak kdyby měl někdo chuť tak pomožte :-)
Seznam všech dostupných funkcí a příkazů pro skriptování npc přeložený z dokumentace k eAtheně. Rozdíl mezi funkcí a příkazem je v tom, že příkaz pouze mění stav systému, ale nezanechává návratovou hodnotu, kdežto funkce ano. Návratová hodnota může být použita např. v podmínce nebo jako argument jiného příkazu. Při skriptování je třeba rozlišit kdy použít funkci a kdy příkaz. Volání příkazu místo funkce může někdy fungovat, ale není to doporučeno, protože to může vést k těžko zjistitelným chybám. Volání funkce místo příkazu zaneřádí zásobník, takže příkaz 'return' pak v tomto skriptu nebude fungovat správně. Všechny příkazy musí končit středníkem (;). Lze tedy použít i několik příkazů na řádce, pokud je správně ukončíte středníkem. Tento způsob však není doporučen, zejména kvůli přehlednosti skriptu. V textu %TAB% označuje obyčejný tabelátor.
Rychlonavigace
A:A B:B C:C D:D E:E F:F G:G H:H I:I J:J K:K L:L M:M N:N O:O P:P Q:Q R:R S:S T:T U:U V:V W:W X:X Y:Y Z:Z
A
Addtoskill
- addtoskill <id skillu>,<level>{,<flag>};
Announce
- announce “<text>“,<flag>{,<barva>};
Areaannounce
- areaannounce “<jméno mapy>“,<x1>,<y1>,<x2>,<y2>,“<text>“,<flag>[,<barva>];
Areamonster
- areamonster “<jméno mapy>“,<x1>,<y1>,<x2>,<y2>,“<jméno mobu>“,<počet>{,“<event label>“};
Areawarp
- areawarp “<jméno počáteční mapy>“,<x1>,<y1>,<x2>,<y2>,“<jméno cílové mapy>“,<x3>,<y3>;
B
Basicskillcheck
- basicskillcheck();
Bonus
- bonus <typ bonusu>,<číslo>;
- bonus2 <typ bonusu>,<číslo>;
- bonus3 <typ bonusu>,<číslo>;
- bonus4 <typ bonusu>,<číslo>;
C
Callfunc
- callfunc “<funkce>“{,<argument>,…<argument>};
- callfunc(“<funkce>“{,<argument>,…<argument>}); - Příkaz vyvolává funkci. Funkce může být volána z jakéhokoliv skriptu na map serveru. Příkaz return vrátí spuštěný skript na místo odkud byl vyvolán. Následující NPC se jménem Dežo hraje s hráčem jednoduchou hru, kdy hráč vyhrává s pravděpodobností 25%.
place.gat,50,50,6%TAB%script%TAB%Dežo%TAB%115,{ mes "[Dežo]" mes "Vyber si skořápku..."; next; callfunc "funcNPC"; mes "Oh, vyhrál jsi!"; close; } function%TAB%script%TAB%funcNPC%TAB%{ set @win, rand(4); if(@win==0) return; mes "Bohužel jsi prohrál."; end; }
Je možné předat funkci argumenty - hodnoty říkající přesně co dělat - které pak budou dostupné pomocí Getarg:getarg(). Za povšimnutí také stojí to, že není třeba používat Return:return a je možné ukončit provádění skriptu pomocí End:end. Pokud chcete vrátit hodnotu uvnitř funkce, je lepší napsat ji ve funkční formě, což dělá kód čistší.
place.gat,50,50,6%TAB%script%TAB%Gauss%TAB%115,{ mes "[Gauss]" mes "Řekni číslo!"; next; input @number; if (callfunc("OverCislo",@number)) mes "Ale tohle číslo je liché!"; close; } function%TAB%script%TAB%OverCislo%TAB%{ if (getarg(0)%2==0) goto JeSude; return (1); JeSude: return (0); }
Callsub
- callsub <návěstí>{,<argument>,…<argument>}; - Příkaz přejde na dané návěstí v tomto skriptu, stejně jako při volání Callfunc:callfunc a předává argumenty dostupné pomocí Getarg:getarg. Jakmile skončíme, měl by být použit Return:return k návratu do bodu odkud bylo návěstí vyvoláno. Příkaz je používán pokud je určitá část skriptu volána znovu a znovu. Ušetří se tím místo i čas, bez potřeby vytvářet další NPC potřebné při volání Callfunc:callfunc. Návěstí ale není přístupné z jiného skriptu.
mes "[Žena]" mes "Podívejme se zda jsi vyhrál..."; callsub Check; mes "Výborně, vyhrál jsi!"; Check: set @win, rand(2); if(@win==0) return; mes "Bohužel jsi prohrál...";
Checkcart
- checkcart();
Checkfalcon
- checkfalcon();
Checkoption
- checkoption(<číslo>);
- checkoption1(<číslo>);
- checkoption2(<číslo>);
Checkriding
- checkriding();
Checkweight
- checkweight(“<jméno předmětu>“,<počet>);
- checkweight(<id předmětu>,<počet>);
Cleararray
- cleararray <název pole>[<první hodnota určená ke změně>],<hodnota>,<počet hodnot ke změně>;
Clone
- clone “<jméno mapy>“,<x>,<y>,“<event>“,<id postavy>{,<master_id>{,<mód>{,<flag>,<trvání>}}};
Close
- close;
Close2
- close2;
Copyarray
- copyarray <cílové pole>[<první hodnota>],<původní pole>[<první hodnota>],<počet ke kopírování>;
Countitem
- countitem(“<jméno předmětu>“); - funkce vrací počet přemětů určených jménem v inventáři postavy.
- countitem(<id předmětu>); - funkce vrací počet přemětů určených 'id předmětu' v inventáři postavy.
mes "[Celník]"; mes "Hmmm, zdá se že pašuješ "+countitem(502)+" jablek!"; close;
Countitem2
- countitem2(<id předmětu>,<identifikace>,<refine>,<atribut>,<karta1>,<karta2>,<karta3>,<karta4>);
- countitem2(“<název předmětu>“,<identifikace>,<refine>,<atribut>,<karta1>,<karta2>,<karta3>,<karta4>);
Cutin
- cutin “<jméno souboru bez přípony>“,<pozice>;
Cutincard
- cutincard <id předmětu>;
D
Deletearray
- deletearray <jméno pole>[<první hodnota>],<kolik smazat>;
Delitem
- delitem <jméno předmětu>,<počet>; - smaže daný počet předmětů určených jménem z inventáře postavy.
- delitem <id předmětu>,<počet>; - smaže daný počet předmětů určených 'id předmětu' z inventáře postavy.
Delitem2
- delitem2 “<název předmětu>“,<počet>,<identifikace>,<refine>,<atribut>,<karta1>,<karta2>,<karta3>,<karta4>{,<id postavy>};
- delitem2 <id předmětu>,<počet>,<identifikace>,<refine>,<atribut>,<karta1>,<karta2>,<karta3>,<karta4>{,<id postavy>}; - Pro popis argumentů viz Getitem2:getitem2.
Disableitems
- disable_items; Viz také Enable_items:enable_items
Disablenpc
- disablenpc “<jméno NPC objektu>“; Viz také Enablenpc:enablenpc
Doevent
- doevent “<jméno NPC objektu>::<label eventu>“;
Donpcevent
- donpcevent “<event label>“;
E
Eaclass
- eaclass {<číslo povolání>};
Enableitems
- enable_items; Viz také Disable_items:disable_items
Enablenpc
- disablenpc “<jméno NPC objektu>“; Viz také Disablenpc:disablenpc
End
- end; - Ukončí spouštění aktuálního skriptu.
F
Failedrefitem
* failedrefitem <equipment slot>;
G
Getareadropitem
- getareadropitem(“<jméno mapy>“,<x1>,<y1>,<x2>,<y2>,<předmět>);
Getareausers
- getareausers(“<jméno mapy>“,<x1>,<y1>,<x2>,<y2>);
Getarg
- getarg(<číslo>);
Getarraysize
- getarraysize(<jméno pole>);
Getbrokenid
* getbrokenid(<číslo>);
Getcharid
- getcharid(<typ>{,“<jméno postavy>“});
Getelementofarray
- getelementofarray(<jméno pole>,<index>);
Getequipisenableref
- getequipisenableref(<equipment slot>);
Getequipisequiped
- getequipisequiped(<equipment slot>);
Getequipisidentify
- getequipisidentify(<equipment slot>);
Getequipid
- getequipid(<equipment slot>);
Getequipname
* getequipname(<equpment slot>);
Getequippercentrefinery
- getequippercentrefinery(<equipment slot>);
Getequiprefinerycnt
- getequiprefinerycnt(<equipment slot>);
Getequipweaponlv
- getequipweaponlv(<equipment slot>);
Getgdskilllv
- getgdskilllv(<id gildy>,<id skillu>);
Getgmlevel
- getgmlevel(); - funkce vrací hodnotu GM práv.
Getguildmaster
- getguildmaster(<id gildy>);
Getguildmasterid
- getguildmasterid(<id gildy>);
Getguildname
- getguildname(<id gildy>);
Getitem
- getitem “<název předmětu>“,<počet>{,<id postavy>}; - vytvoří předmět podle jména.
- getitem <id předmětu>,<počet>{,<id postavy>}; - vytvoří předmět podle ID.
- getitem „Poring_Card“,4; - vytvoří 4 Poring karty v inventáři postavy.
- getitem 502,10; - vytvoří 10 jablek v inventáři postavy.
Getitem2
- getitem2 “<název předmětu>“,<počet>,<identifikace>,<refine>,<atribut>,<karta1>,<karta2>,<karta3>,<karta4>{,<id postavy>};
- getitem2 <id předmětu>,<počet>,<identifikace>,<refine>,<atribut>,<karta1>,<karta2>,<karta3>,<karta4>{,<id postavy>};
Getmapusers
- getmapusers(“<map name>“);
Getpartyleader
- getpartyleader <id party>,[<typ>];
Getpartymember
- getpartymember <id party>,[<typ>];
Getpartyname
- getpartyname(<id party>);
Getskilllv
- getskilllv(<id skillu>);
Gettime
- gettime(<typ>)
Gettimetick
- gettimetick(<typ tiku>);
Gettimestr
- gettimestr(<formátovací řetězec>,<maximální délka>);
Getusers
- getusers(<typ>);
Goto
- goto <návěstí>; - Provede skok na řádek skriptu obsahující 'návěstí'. Obvykle je používán v kombinaci s jinými příkazy, např. if:if.
goto Label; mes "Toto hráč neuvidí."; Label: mes "Toto hráč uvidí.";
Grouprandomitem
- groupranditem <id skupiny>;
Guildchangegm
- guildchangegm(<id gildy>,<jméno nového guild mastera>);
Guildopenstorage
- guildopenstorage();
Guildskill
- guildskill <id skillu>,<level>{,<flag>};
H
Heal
- heal <hp>,<sp>; - vylečí nebo obnoví postavě daný počet hp, sp.
Hideoffnpc
- hideoffnpc “<jméno NPC objektu>“; viz také Hideonnpc:hideonnpc
Hideonnpc
- hideonnpc “<jméno NPC objektu>“; viz také Hideoffnpc:hideoffnpc
I
If
- if (<podmínka>) <kód>;
Input
- input <proměnná>;
Itemheal
- itemheal <hp>,<sp>;
Itemskill
- itemskill <id skillu>,<level skillu>,“<viditelné jméno skillu>“;
J
Jobchange
- jobchange <číslo povolání>{,<upper flag>};
Jobname
- jobname <číslo povolání>;
K
Killmonster
- killmonster “<jméno mapy>“,“<event label>“; - zabije všechny moby na dané mapě s určitým labelem.
Killmonsterall
- killmonsterall “<jméno mapy>“;
L
M
Makeitem
- makeitem “<název předmětu>“,<počet>,<x>,<y>,“<jméno mapy>“;
- makeitem <id předmětu>,<počet>,<x>,<y>,“<jméno mapy>“;
Mapannounce
- mapannounce “<map name>“,“<text>“,<flag>[,<color>];
Menu
- menu “<položka menu1>“,<návěstí1>{,“<položka menu2>“,<návěstí2>…};
Mes
- mes “<řetězec>“; - Tento příkaz zobrazí na obrazovce hráče, který skript spustil, okno a zobrazí 'řetězec' v tomto okně. Okno neobsahuje žádné tlačítka 'close' ani 'next', proto je důležité je připojit! Bez nich hráč nemůže dělat nic jiného. Pokud je 'řetězec' prázdný, zobrazí se prázdné okno. V řetězci je možné měnit barvy. Barevný kód je '^<R><G><B>' a obsahuje tři hexadecimální čísla reprezentující červenou, zelenou a modrou složku. ^FF0000 je červená, ^00FF00 zelená, ^0000FF modrá, ^000000 je černá. POZOR ^FF00FF je fialová barva, ale právě toto je barva kterou klient považuje za průhlednou, takže text v této barvě vytvoří poněkud podivný efekt. Jakmile změníte barvu, nezapomeňte ji změnit zpět na černou, pokud ovšem nechcete zbytek textu ve změněné barvě. Je také dobré oddělit barevné kódy od textu mezerou.
- mes „Tento text se zobrazí v okně.“;
- mes „Toto je ^FF0000 červené ^000000 a toto je ^00FF00 zelené ^000000.“;
Monster
- monster “<jméno mapy>“,<x>,<y>,“<jméno>“,<id mobu>,<počet>{,“<event label>“};
- <jméno mapy> - jméno mapy kde se monstrum objeví
- <x>,<y> - souřadnice na mapě, kde se monstrum objeví
- <jméno> - jméno se kterým se mob objeví
- <id mobu> - id podle mob_db.txt monstra určí jaký typ moba bude použit
- <počet> - počet mobů
- <event label> - label, který se provede po smrti mobíka.
N
Next
- next;
O
Openstorage
- openstorage; - otevře postavě kafru.
P
Percentheal
- percentheal <hp>,<sp>;
Playerattached
- playerattached; - Vrátí ID hráče přidružené k právě spuštěnému skriptu. Vrátí 0 v případě že není žádné ID přidruženo nebo pokud hráč již neexistuje na map serveru (logout). Je moudré kontrolovat přidruženého hráče ve funkcích skriptu které zachází s timery, protože zde není záruka že hráč bude ještě nalogovaný ve hře v době spuštění triggeru. ID hráče je vlastně ID účtu.
Produce
- produce <level předmětu>;
Q
R
Rand
- rand(<číslo1>{,<číslo2>}); - Pro jeden argument vybere náhodné číslo mezi 0 a číslo1 včetně. Pro dva argumenty vybere náhodné číslo mezi číslo1 a číslo2 včetně.
- rand(2) - bude vybráno z čísel 0 1 2.
- rand(2,4) - bude vybráno z čísel 2 3 4.
Readparam
- readparam(<číslo parametru>);
Repair
- repair <číslo pokažené věci>;
Return
- return {(<hodnota>)}; - Při volání Callsub:callsub nebo Callfunc:callfunc tento příkaz umožňuje návrat zpět do původího skriptu. Volitelně lze vrátit hodnou která původnímu skriptu řekne, co se přesně stalo. Pro přístup k této hodnotě je třeba použít příkaz Set:set: set <proměnná>,callfunc “<funkce>“
Nezapomeňte na kulaté závorky. Jsou potřeba kdykoliv 'hodnota' není přímo číslo. Např. return (@x+@y); Je třeba dávat pozor na to, že if (<podmínka>) return (<cokoliv>); vždy nefunguje! I když by to pomohlo k čitelnosti kódu, pokuste se této konstrukci vyhnout. Pro příklad použití viz Callfunc:callfunc a Callsub:callsub.
Roclass
- roclass <job number> {,<gender>}
S
Save
- save “<map name>“,<x>,<y>;
Savepoint
- savepoint “<jméno mapy>“,<x>,<y>;
Set
- set <variable>,<expression>;
Setarray
- setarray <array name>[<first value>],<value>{,<value>…<value>};
Setcart
- setcart; - dá postavě vozík.
Setfalcon
- setfalcon; - dá postavě falcona.
Setlook
- setlook <typ vzhledu>,<hodnota>;
Setoption
- setoption <číslo>{,typ};
Setriding
* setriding;
Skill
- skill <id skillu>,<level>{,<flag>};
Statusup
- statusup <vlastnost>;
Statusup2
- statusup2 <vlastnost>,<velikost změny>;
Strcharinfo
* strcharinfo(<typ>);
Successrefitem
- successrefitem <equipment slot>;
T
U
V
Viewpoint
- viewpoint <akce>,<x>,<y>,<číslo bodu>,<barva>;
W
Warp
- warp “<mapa>“,<x>,<y>; - přenese postavu na danou mapu a pozici (x,y).