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
Addtoskill
Announce
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
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
Checkfalcon
Checkoption
checkoption(<číslo>);
checkoption1(<číslo>);
checkoption2(<číslo>);
Checkriding
Checkweight
checkweight(„<jméno předmětu>“,<počet>);
checkweight(<id předmětu>,<počet>);
Cleararray
Clone
clone „<jméno mapy>“,<x>,<y>,„<event>“,<id postavy>{,<master_id>{,<mód>{,<flag>,<trvání>}}};
Close
Close2
Copyarray
Countitem
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
Cutincard
D
Deletearray
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
Disablenpc
Doevent
Donpcevent
E
Eaclass
Enableitems
Enablenpc
End
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
Getarraysize
Getbrokenid
Getcharid
Getelementofarray
Getequipisenableref
Getequipisequiped
Getequipisidentify
Getequipid
Getequipname
* getequipname(<equpment slot>);
Getequippercentrefinery
Getequiprefinerycnt
Getequipweaponlv
Getgdskilllv
Getgmlevel
Getguildmaster
Getguildmasterid
Getguildname
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
Getpartyleader
Getpartymember
Getpartyname
Getskilllv
Gettime
Gettimetick
Gettimestr
Getusers
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
Guildchangegm
Guildopenstorage
Guildskill
H
Heal
Hideoffnpc
Hideonnpc
I
If
Itemheal
Itemskill
J
Jobchange
Jobname
K
Killmonster
Killmonsterall
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
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.
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
O
Openstorage
P
Percentheal
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
Q
R
Rand
Readparam
Repair
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
S
Save
Savepoint
Set
Setarray
Setcart
Setfalcon
Setlook
Setoption
Setriding
Skill
Statusup
Statusup2
Strcharinfo
Successrefitem
T
U
V
Viewpoint
viewpoint <akce>,<x>,<y>,<číslo bodu>,<barva>;
W
Warp
X
Y
Z