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.
areaannounce “<jméno mapy>“,<x1>,<y1>,<x2>,<y2>,“<text>“,<flag>[,<barva>];
areamonster “<jméno mapy>“,<x1>,<y1>,<x2>,<y2>,“<jméno mobu>“,<počet>{,“<event label>“};
areawarp “<jméno počáteční mapy>“,<x1>,<y1>,<x2>,<y2>,“<jméno cílové mapy>“,<x3>,<y3>;
bonus <typ bonusu>,<číslo>;
bonus2 <typ bonusu>,<číslo>;
bonus3 <typ bonusu>,<číslo>;
bonus4 <typ bonusu>,<číslo>;
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 <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...";
checkoption(<číslo>);
checkoption1(<číslo>);
checkoption2(<číslo>);
checkweight(“<jméno předmětu>“,<počet>);
checkweight(<id předmětu>,<počet>);
clone “<jméno mapy>“,<x>,<y>,“<event>“,<id postavy>{,<master_id>{,<mód>{,<flag>,<trvání>}}};
mes "[Celník]";
mes "Hmmm, zdá se že pašuješ "+countitem(502)+" jablek!";
close;
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>);
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 “<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.
* failedrefitem <equipment slot>;
getareadropitem(“<jméno mapy>“,<x1>,<y1>,<x2>,<y2>,<předmět>);
getareausers(“<jméno mapy>“,<x1>,<y1>,<x2>,<y2>);
* getequipname(<equpment slot>);
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 “<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>};
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í.";
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>“;
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.
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.
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.
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.
viewpoint <akce>,<x>,<y>,<číslo bodu>,<barva>;