การเขียน Scipt NPC

วิธีเขียน Script NPC RO (เบื้องต้น)

บทความสอนพวกนี้ไม่ใช่ของผมนะครับและผมก็จำไม่ได้ด้วยว่าของใครอ่ะเพราะมีมานานถึง 4 ปีแล้ว ส่วนใครที่ต้องการหาคำสั่ง NPC หรือติดขัดในการเขียน NPC ก็ถามมาได้เลยนะครับแล้วผมจะอธิบายอย่างละเอียดเลยครับ

===============================================
คำสั่งต่างๆ ของ การเขียน NPC ครับ..........!!!!!!
===============================================
===============================================
แบบฟอร์มหลักๆ
===============================================
prontera.gat,116,62,2 script Kafra 83,{
mes "[Kafra]";
mes "สวัสดีค่ะ";
next;
mes "ยินดีต้อนรับค่ะ";
close;
}
===============================================
สีข้อความ
===============================================
^FF0000 Red
^FFFF00 yellow
^00FF00 green
^FF00FF pink
^FF8040 orange
^0000FF blue
^804040 brown
^C0C0C0 gray
^000000 black
===============================================
คำสั่งพื้นฐาน
===============================================
--------------------------------------------------------------------
jobchange หมายเลข;
--------------------------------------------------------------------
เปลี่ยนอาชีพ
Ex: jobchange 1;
0 Novice
1 Swordman
2 Mage
3 Archer
4 Acolyte
5 Merchant
6 Thief
7 Knight
8 Priest
9 Wizard
10 Blacksmith
11 Hunter
12 Assassin
13 Knight2
14 Crusader
15 Monk
16 Sage
17 Rogue
18 Alchem
19 Bard
20 Dancer
21 Crusader2
22 Formal
23 Super Novice

--------------------------------------------------------------------
getitem รหัสไอเท่ม, จำนวน ;
--------------------------------------------------------------------
ได้รับ ไอเท่ม
Ex: getitem 512,50;

--------------------------------------------------------------------
delitem รหัสไอเท่ม, จำนวน ;
--------------------------------------------------------------------
ลบ ไอเท่ม
Ex: delitem 512,50;

--------------------------------------------------------------------
if (เงื่อนไข) goto ตัวลิงค์;
--------------------------------------------------------------------
Ex: if (Zeny < 250) goto Out;

--------------------------------------------------------------------
cutin "ชื่อภาพ",ตำแหน่ง;
--------------------------------------------------------------------
0 ตำแหน่งซ้ายของจอ
1 ตำแหน่งกลางของจอ
2 ตำแหน่งขวาของจอ
255 close image
Ex: เปิด
cutin "kafra_02",2;
Ex: ปิด
cutin "kafra_02",55;

--------------------------------------------------------------------
warp "แผนที่.gat",X,Y;
--------------------------------------------------------------------
วาร์ปไปแมพนั้นๆ

--------------------------------------------------------------------
savepoint "แผนที่.gat",X,Y;
--------------------------------------------------------------------
เซฟในตำแหน่งนั้นๆ

--------------------------------------------------------------------
set Zeny,Zeny + - จำนวน;
--------------------------------------------------------------------
กำหนดจำนวนเงิน
set Zeny,Zeny+10000;

--------------------------------------------------------------------
set StatusPoint,StatusPoint + - จำนวน;
--------------------------------------------------------------------
กำหนดจำนวน Status point
set StatusPoint,StatusPoint+200;

--------------------------------------------------------------------
set SkillPoint,SkillPoint + - จำนวน;
--------------------------------------------------------------------
กำหนดจำนวนสกิลพ้อยน์
set SkillPoint,SkillPoint+20;

--------------------------------------------------------------------
countitem(รหัส);
--------------------------------------------------------------------
นับจำนวน item
Ex: if (countitem(999) < 50) goto OUT;

--------------------------------------------------------------------
checkweight(รหัส,น้ำหนัก);
--------------------------------------------------------------------
ตรวจสอบน้ำหนัก
Ex: if (!(checkweight(999,10)) goto OUT;

--------------------------------------------------------------------
heal HP,SP;
--------------------------------------------------------------------
เติมเลือด
Ex heal 30000,3000;

--------------------------------------------------------------------
setcart;
--------------------------------------------------------------------
สร้าง รถเข็น

--------------------------------------------------------------------
setfalcon;
--------------------------------------------------------------------
สร้างนก

--------------------------------------------------------------------
setriding;
--------------------------------------------------------------------
สร้างเป็ด

--------------------------------------------------------------------
openstorage;
--------------------------------------------------------------------
เปิด ตู้เก็บของ

--------------------------------------------------------------------
monster " แผนที่.gat " , X, Y, " ชื่อ monster ", รหัส ,จำนวน ;
--------------------------------------------------------------------
Ex: monster "prontera.gat",146,98,"Proing",1002,1;

--------------------------------------------------------------------
resetstatus;
--------------------------------------------------------------------
รีเซ็ตสเตตัส

--------------------------------------------------------------------
resetskill;
--------------------------------------------------------------------
รีเซต สกิล

--------------------------------------------------------------------
ประกาศตัวเหลือง
--------------------------------------------------------------------
announce "ข้อความ",0;
areaannounce "แผนที่.gat",X1,Y1,X2,Y2,"ข้อความ",0;

--------------------------------------------------------------------
แสดงชื่อ ตัวละคร strcharinfo(0)
--------------------------------------------------------------------
mes "ชื่อตัวละครคือ" + strcharinfo(0) + "ครับ";

--------------------------------------------------------------------
setlook n1,n2;
--------------------------------------------------------------------
n1 คือ (1~8) เปลี่ยน Style
1 hair style
2 weapon
3 head_bottom
4 head_middle
5 head_upper
6 hair color
7 clothe color
8 sheld

n2 เป็นค่าที่จะใช้
เช่น
เปลี่ยนทรงผม (1-8)
setlook 1, ใส่เข้าปาย ;
เปลี่ยนสีผม (1-8)
setlook 6, ใส่เข้าปาย ;
เปลี่ยนสีเสื้อ(0-4)
setlook 7, ใส่เข้าปาย ;

--------------------------------------------------------------------
ค่าที่ต้องการให้เก็บไว้
--------------------------------------------------------------------

input Var_Name; เป็นการให้ผู้เล่นใส่ค่าลงไป เช่นระบุจำนวน
Ex: input batman;

set Var_Name, ค่า ; - กำหนดค่าตายตัว

set @Var_Name, ค่า ; - กำหนดค่าแบบชั่วคราว

set Var_Name , rand( ค่าแรก , ค่าหลัง); กำหนดค่าแบบ random

--------------------------------------------------------------------
กำหนด คำสั่งให้ NPC
--------------------------------------------------------------------
enablenpc "NPC_Name"; ให้ npc ทำงาน
disablenpc "NPC_Name"; ให้ npc ไม่ทำงาน
doevent "NPC_Name"; อันนี้ไม่รู้

--------------------------------------------------------------------
นับจำนวนคนในแผนที่
--------------------------------------------------------------------
getmapusers ("แผนที่.gat")
Ex: if( getmapusers("force_1-1.gat")>0 ) goto L_MAPINUSE;


===============================================
สคริป เกี่ยวกับ การ อ่านค่า และแสดงชื่อครับ
===============================================
(ขอบคุณ Aegis - eAthena Board ครับ)

readparam(ประเภท);
เช่น
readparam(9);

แสดงค่าต่างๆ ตามนี้ครับ
9 - StatusPoint
11 - BaseLevel
12 - SkillPoint
19 - Class( ค่าของอาชีพตาม const.txt)
20 - Zeny
21 - Sex ( 0 ผู้หญิง และ 1 ผู้ชาย)
24 - Weight
25 - MaxWeight
55 - JobLevel
และจะแสดงเป็น 0 ตลอด เมื่อใส่ ตัวเลขอย่างอื่นไปครับ

===============================================

===============================================
5. NPC เอาไว้ประกาศข่าวสาธารนะ (ได้แต่ตัวเลขน่ะ)
===============================================
prontera.gat,150,150,4 script ผู้ประกาศข่าว 750,{

mes "[ผู้ประกาศข่าว]";
mes "สวัสดีค่ะ ดิฉันยินดีจะเป็นกระบอกเสียงให้ท่าน";
mes "กรุณาใส่ข้อความลงไปค่ะ";
next;

input @message$;

mes "[ผู้ประกาศข่าว]";
mes "ดิฉันจะประกาศแล้วนะคะ";
next;

if( @message$ == 0) goto Lno;
announce "คุณ [ " +strcharinfo(0) + " ] ได้ฝากข้อความว่า [ " + @message$ + " ] ค่ะ" ,0;
close;

Lno:
mes "[ผู้ประกาศข่าว]";
mes "คุณต้องพิมพ์ข้อความอะไรบ้างนะคะ";
close;
}

===============================================
6. NPC กำหนดเวลา (เขียนให้สดเลยนะเนี่ยะ เอาไปลองหน่อยครับ)
===============================================

izlude.gat,50,50,0 script ตัวกำหนดเวลา 114,{

mes "เจ้าต้องการไปเลยหรือไม่ ข้าให้เวลา 60 วินาที";
menu "ต้องการ",Lgo,"ยังก่อน",Lno;
Lgo:
addtimer 5000,"time1";
warp "prontera.gat",0,0;
end;
Lno:
close;
end;
}

prontera.gat,150,150,0 script time1 -1,{
announce "ข้าให้เวลาเจ้า 60 วินาที ในการค้นหา......",3;
addtimer 60000,"timeclose";
addtimer 50000,"timeleft";
}

prontera.gat,151,151,0 script timeleft -1,{
announce "เหลืออีก 10 วินาที",3;
}

prontera.gat,152,152,0 script timeclose -1,{
warp "izlude.gat",0,0;
end;
}

==========================================
ตัวอย่าง NPC ในในการ สร้าง monster เป็นระรอกคลื่น
และกำหนดให้ สร้าง event ได้แต่ต้องหลังจากเวลาที่กำหนดครับ
==========================================
Rep. 2339 หน้า 74

คุยกับ npc ตัวนี้แล้วมันจะ set $time,1;
พอเวลาผ่านไป addtimer ทำงานปุ๊บ npc ที่ตั้งไว้ตรง
addtimer ทำงานแล้วมันจะ set $time,1;

คำสั่ง set $time,1;คือการใช้คำสั่ง แบบ public ครับ (ไม่ว่าตัวไหนคุย ค่าจะเท่ากันเสมอ)

ผมเขียนแบบลวกๆ นะครับ

comodo.gat,186,148,4 script ถล่มเมือง 771,{
if ($time == 1) goto Lwait;
mes "เจ้าจะถล่มเมืองใช่ไหม";
next;
menu "ok",Lok,"no",Lno;
Lok:
mes "ระวังตัวให้ดี";
next;
// $time คือคำสั่งแบบ public
set $time,1
announce "ตายเสียเถิด",8;
addtimer 1000 "event";
close;
Lno:
mes "มาเมื่อเจ้าพร้อมละกัน";
close;

Lwait:
mes "เจ้าต้องรอก่อน 3 นาที";
close;
}

comodo.gat,0,0,0 Script event -1,{
announce "พวกหนูมาแล้ว...........",8;
monster "comodo.gat",0,0,"โพริ่ง",1002,40,"QuestPoring";
addtimer 60000 "ending";
end;
}

comodo.gat,1,0,0 Script ending -1,{
announce "[Doppelganger]  พอแค่นี้ก่อน......... ข้าจะกลับมาอีกครั้ง",8;
killmonster "comodo.gat","QuestPoring";
// รอ 3 นาที
addtimer 180000 "Playagain";
end;
}

comodo.gat,1,0,0 Script Playagain -1,{
set $time,0;
end;
}
================================================================================
====================
รวมการเขียนNpcโดย Geobot
แปลโดย bones

บรรทัดแรกของการเขียนNpcต้องขึ้นต้นด้วย:

prt_church.gat,184,41,4 script Cleric 60,{

ในแต่ละส่วนของบรรทัดแรกคือ:

prt_church.gat,184,41,4 ---- บรรทัดนี้มี เริ่มด้วยชื่อแผนที่แล้วขั้นด้วย " , " และก็ x กับ y เป็นค่าตำแหน่งแล้วขั้นด้วย " , " แล้วก็เลข 4 คือทิศทางที่หน้าหันไป(มี1-

---- และเว้นด้วยการกด tab เพื่อความชัวส์

script ---- เขียนข้อความนี้เพื่อจะทำให้ข้อความในนี้ทั้งหมดเป็น script npc



Cleric ---- ชื่อของNpcนั้นๆ



60, ---- 60คือหมายเลขของnpcที่ต้องการ และตามด้วย " , "

{ ---- จะเป็นการเริ่มทำการเขียนข้อความNpcนั้นๆ

Tip: ถ้าบรรทัดแรกใส่ด้วย" // "ข้างหน้า จะเป็นการปิดการทำงานของNpcตัวนั้น
สคริปเกี่ยวกับการอัพสเตตัสตัวละคร
===============================================

statusup ประเภท;
statusup2 ประเภท , จำนวน ;

เพิ่มค่าต่างๆ ตามนี้ครับ
13 - STR
14 - AGI
15 - VIT
16 - INT
17 - DEX
18 - LUK
จะไม่มีผลเมื่อใส่ ตัวเลขอย่างอื่นไปครับ

statusup เป็นการเพิ่ม (แต่ต้องมี Status Point นะ)
statusup2 เป็นการเพิ่ม แบบไม่มี Status Point (น่าลองนะ ไม่รู้ได้จริงป่าว /ครึๆๆ)

===============================================
คำสั่งเกียวกับ การแสดงชื่อครับตัวละคร ปาตี้ และกิลครับ
===============================================
คำสั่งก็
strcharinfo(0) แสดงชื่อครับแสดงชื่อ (รู้สึกจะได้แค่ 0 นะ)

getcharid(#) แสดง ID ของตัวละคร (รหัส)

getpartyname(ID) - แสดงชื่อ Party name ต้องกรอก ID เข้าไปด้านในครับ (เด๋วมาบอก เทคนิค)

getguildname(ID) - แสดงชื่อ Guild name ต้องกรอก ID เข้าไปด้านในครับ (เด๋วมาบอก เทคนิค)

เพิ่มค่าต่างๆ ตามนี้ครับ
0 ตัวละคร
1 party
2 guild ครับ


สำหรับเทคนิคในการแสดงชื่อกิลหรือ ปาตี้ ก็

1. set ค่ารหัส ปาตี้หรือกิลชั่วคราวก่อน ครับ เช่น
ปาตี้ก็
set @PartyID, getcharid(1);
กิลก็
set @GuildID, getcharid(2);

2. จากนั้น ก็ทำการแสดงชื่อได้ครับ (มันไม่ให้รันคำสั่งซ้อนกัน)
getpartyname(@PartyID)
getguildname(@GuildID)


3. วิธีนำไปใช้ก็ เช่น
mes "ชื่อ Party ของคุณคือ" + getpartyname(@PartyID) "ขอให้สนุกนะครับ";
mes "ชื่อ Guild ของคุณคือ" + getguildname(@PartyID) "ขอให้สนุกนะครับ";

คำถาม
ทำไมต้อง set ค่าชั่วคราวก่อน
ตอบ
เพราะว่า คำสั่งมันรันซ้อนกันไม่ได้ครับ

อันนี้ คือ อันที่ผิด
getpartyname( getcharid(1) )
ไม่ต้องเอาไปใช้นะครับ ผิดครับ
===============================================

===============================================
1. กำหนดเวลาประกาศ
===============================================
prontera.gat,145,185,0 script ev_clock 116,{
end;

// ทุกๆ 5 นาทีหลังจากผ่านไป 1 ชม
OnMinute05:
announce "ผ่านไป 5 นาทีแล้วครับ",8;
end;

// ตอนเที่ยง (24 ชม)
OnHour12:
announce "ได้เวลากินข้าวแล้ว",8;
end;

// กำหนดเวลาตายตัว
OnClock2359:
announce "อีก 1 นาทีเที่ยงคืนครับ",8;
end;

// กำหนดวันไปเลย
OnDate0101:
announce "สวัสดีวันปีใหม่ เย่......",8;
end;
}

===============================================
2. การใส่ password
===============================================

geffen.gat,172,174,5 script ทหารยาม 85,{

set PWD,555666777;
//ใส่ตามสะดวก แต่กำหนดได้เพียงแค่เลข 1-9 เท่านั้นครับ

mes "[ทหารยาม]";
mes "หยุด บอกระหัสผ่านมา";
next;
input @input;
mes "[ทหารยาม]";
if (@input == PWD) goto right;
mes "ไม่ถูกต้อง";
close;
right:
mes "เก่งมาก";
next;
warp "geffen_in.gat",70,52;
close;
}

===============================================
3. npc สร้าง monster แบบเลือก ID เองเลย
===============================================
prontera.gat,145,145,5 script ทหารยาม 85,{

set @LowerID,xxxx;// mob id ตัวแรก
set @UpperID,xxxx;// mob id ตัวสุดท้าย

mes "[ทหารยาม]";
mes "จงกรอก ID ของ Monster";
next;
menu "เริ่มกรอก",Linput,"ยกเลิก",Lno,

Linput:
input @Num;

if (@Num == 0) close;// ปิด script ถ้า num เท่ากับ 0
if ((@Num (ใส่เครื่องหมายน้อยกว่า) @LowerID) || (@Num (ใส่เครื่องหมายมากกว่า) UpperID)) goto Linput;
if ((@Num (ใส่เครื่องหมายมากกว่าหรือเท่ากับ) 1324) && (@Num (ใส่เครื่องหมายน้อยกว่าหรือเท่ากับ) 1363)) goto Linput;
// 1324 ~ 1363 เป็น กล่อง กิล
monster "prontera.gat", 150 , 150 ,"Summon Monster",@Num,1;
L.no:
close;
}

ปล. ให้ใส่เครื่องมายตามที่บอกนะครับ (เอาวงเล็บออกด้วย)
===============================================
4. ตัวสร้างมอนสเตอร์ แบบสุ่มคับ
===============================================

izlude.gat,100,100,4 script ผู้รักษาประตู 85,{

set @Low,0000; // กำหนด ID monster เริ่มต้น
set @Up,0000; // กำหนด ID monster สิ้นสุด

mes "[ผู้รักษาประตู]";
mes "ข้าจะเริ่ม Random ค่าแล้วนะ";
mes "เริ่มเลยไหม";
next;
menu "เริ่มเลย",Lrandom,"ยกเลิก",Lcc;

Lrandom:
set @random,rand(@Low,@Up);

if (@random (มากกว่าหรือเท่ากับ) 1324) goto Lrandom;
if (@random (น้อยกว่าหรือเท่ากับ) 1363) goto Lrandom;

monster "prontera.gat", 150 , 150 ,"สัตว์ประหลาด",@random,1;

Lcc:
close;
}
===============================================
5. NPC เอาไว้ประกาศข่าวสาธารนะ (ได้แต่ตัวเลขน่ะ)===============================================
prontera.gat,150,150,4 script ผู้ประกาศข่าว 750,{

mes "[ผู้ประกาศข่าว]";
mes "สวัสดีค่ะ ดิฉันยินดีจะเป็นกระบอกเสียงให้ท่าน";
mes "กรุณาใส่ข้อความลงไปค่ะ";
next;

input @message$;

mes "[ผู้ประกาศข่าว]";
mes "ดิฉันจะประกาศแล้วนะคะ";
next;

if( @message$ == 0) goto Lno;
announce "คุณ [ " +strcharinfo(0) + " ] ได้ฝากข้อความว่า [ " + @message$ + " ] ค่ะ" ,0;
close;

Lno:
mes "[ผู้ประกาศข่าว]";
mes "คุณต้องพิมพ์ข้อความอะไรบ้างนะคะ";
close;
}

===============================================
6. NPC กำหนดเวลา (เขียนให้สดเลยนะเนี่ยะ เอาไปลองหน่อยครับ)
===============================================

izlude.gat,50,50,0 script ตัวกำหนดเวลา 114,{

mes "เจ้าต้องการไปเลยหรือไม่ ข้าให้เวลา 60 วินาที";
menu "ต้องการ",Lgo,"ยังก่อน",Lno;
Lgo:
addtimer 5000,"time1";
warp "prontera.gat",0,0;
end;
Lno:
close;
end;
}

prontera.gat,150,150,0 script time1 -1,{
announce "ข้าให้เวลาเจ้า 60 วินาที ในการค้นหา......",3;
addtimer 60000,"timeclose";
addtimer 50000,"timeleft";
}

prontera.gat,151,151,0 script timeleft -1,{
announce "เหลืออีก 10 วินาที",3;
}

prontera.gat,152,152,0 script timeclose -1,{
warp "izlude.gat",0,0;
end;
}

==========================================
ตัวอย่าง NPC ในในการ สร้าง monster เป็นระรอกคลื่น
และกำหนดให้ สร้าง event ได้แต่ต้องหลังจากเวลาที่กำหนดครับ
==========================================
Rep. 2339 หน้า 74

คุยกับ npc ตัวนี้แล้วมันจะ set $time,1;
พอเวลาผ่านไป addtimer ทำงานปุ๊บ npc ที่ตั้งไว้ตรง
addtimer ทำงานแล้วมันจะ set $time,1;

คำสั่ง set $time,1;คือการใช้คำสั่ง แบบ public ครับ (ไม่ว่าตัวไหนคุย ค่าจะเท่ากันเสมอ)

ผมเขียนแบบลวกๆ นะครับ

comodo.gat,186,148,4 script ถล่มเมือง 771,{
if ($time == 1) goto Lwait;
mes "เจ้าจะถล่มเมืองใช่ไหม";
next;
menu "ok",Lok,"no",Lno;
Lok:
mes "ระวังตัวให้ดี";
next;
// $time คือคำสั่งแบบ public
set $time,1
announce "ตายเสียเถิด",8;
addtimer 1000 "event";
close;
Lno:
mes "มาเมื่อเจ้าพร้อมละกัน";
close;

Lwait:
mes "เจ้าต้องรอก่อน 3 นาที";
close;
}

comodo.gat,0,0,0 Script event -1,{
announce "พวกหนูมาแล้ว...........",8;
monster "comodo.gat",0,0,"โพริ่ง",1002,40,"QuestPoring";
addtimer 60000 "ending";
end;
}

comodo.gat,1,0,0 Script ending -1,{
announce "[Doppelganger]  พอแค่นี้ก่อน......... ข้าจะกลับมาอีกครั้ง",8;
killmonster "comodo.gat","QuestPoring";
// รอ 3 นาที
addtimer 180000 "Playagain";
end;
}

comodo.gat,1,0,0 Script Playagain -1,{
set $time,0;
end;
}
================================================================================
====================
รวมการเขียนNpcโดย Geobot
แปลโดย bones

บรรทัดแรกของการเขียนNpcต้องขึ้นต้นด้วย:

prt_church.gat,184,41,4 script Cleric 60,{

ในแต่ละส่วนของบรรทัดแรกคือ:

prt_church.gat,184,41,4 ---- บรรทัดนี้มี เริ่มด้วยชื่อแผนที่แล้วขั้นด้วย " , " และก็ x กับ y เป็นค่าตำแหน่งแล้วขั้นด้วย " , " แล้วก็เลข 4 คือทิศทางที่หน้าหันไป(มี1-

---- และเว้นด้วยการกด tab เพื่อความชัวส์

script ---- เขียนข้อความนี้เพื่อจะทำให้ข้อความในนี้ทั้งหมดเป็น script npc



Cleric ---- ชื่อของNpcนั้นๆ



60, ---- 60คือหมายเลขของnpcที่ต้องการ และตามด้วย " , "

{ ---- จะเป็นการเริ่มทำการเขียนข้อความNpcนั้นๆ

Tip: ถ้าบรรทัดแรกใส่ด้วย" // "ข้างหน้า จะเป็นการปิดการทำงานของNpcตัวนั้น

คำสั่ง Npc

ทุกๆครั้งที่เขียนNpcจะต้องมี " ; "ปิดท้ายทุกครั้งหลังจากเขียนคำสั่งnpcเสร็จไปหนึ่งคำสั่ง

mes "text";
คำสั่งนี้คือคำสั่งข้อความที่npcพูดโดยใส่ข้อความที่ต้องการให้แสดงออกมานั้นจะอยู่ท
ี่ " "
และเมื่อขอความหมาย 1 หน้าต่างส่วนใหญ่จะมีคำสั่ง " next " ตามมาในบรรทัดถัดไป


การใส่สีให้ข้อความนั้น เราจะใช้ " ^ " ขึ้นแล้วตามด้วยcodeของสีที่ต้องการ ซึ่งCodeของสีนั้นจะเป็นcode เลขฐาน16และเมื่อหมดข้อความที่ต้องการสีให้ลงถ้ายด้วย " ^000000 " เพื่อให้กลับมาเป็นสีดำ

mes "Hello, ^000099Geobot^000000, how are you doing today?";

ข้างบนคือตัวอย่างครับโดย Geobot

Next;
นี่คือคำสั่งอย่างง่ายๆ " next " เป็นการทำให้มีปุ่มเพื่อไปยังข้อความต่อไป เมื่อจบข้อความต่อๆหรือคำสั่งต่างๆ

Mes "Hello, ^000099Geobot^000000, how are you doing today?";
Next;
Mes "I hope you are here to teach me scripting";

นี่คือตัวอย่างการใช้ " next " ปุ่มระหว่างข้อความในบรรทัดที่สอง

Close;
นี่คือปุ่มที่ใช้เมื่อต้องการให้จบการทำงานของnpc คำสั่งนี้จะแสดงปุ่ม " close " และเมื่อคลิกจะทำการปิดห้านต่างสนทนากับnpcทันทีและจะจบการทำงานของnpcทันทีที่กดปุ่
มนี้.

Goto label1;

นี้คือคำสั่งที่สาทารถบังคับให้ข้ามไปยังบรรทัดที่เราต้องการได้โดยจะทำการข้ามไปยัง
บรรทัดที่มีตัวคำสั่ง COLON( ที่มีชื่อเรากำหนดเท่านั้นและมันจะทำงานทันทีที่มีคำสั่งนี้

Mes "hello";
Goto example;
Mes "hello again";
Example:
Mes "goodbye";

นี่คือตัวอย่าง คำว่า "hello again" จะไม่มีการปรากฏมาให้เห็น มันก็ง่ายๆเพราะมันจะข้ามข้อความนั้นๆไปอย่างครบถ้วน
นี่คือสิ่งที่เป็นตัวอย่างต้นๆเท่านั้นเพราะคำสั่งนี้สามารถที่จะนำไปใช้ควบกับคำสั่
งอื่นได้

Menu "option1",label1,"option2",label2;

และนี่คืออีกคำสั่งนึงที่จะทำการข้ามไปยังบรรทัดที่ต้องการ แต่คำสั่งนี้จะเป็นการให้สามารถเลือกได้ว่าต้องการข้ามไปยังบรรทัดไหนคุณสามารทำตัวเ
ลือกได้สูงสุดถึง100ตัวเลือก

Mes "Where do you hang out the most?";
Menu "Prontera",prt,"Morroc",moc;
Prt:
Mes "I hate prontera, it's too crowded for my tastes";
Close;
Mes "Ahhh, the desert life is for me as well.";
Close;

และนี่ก็คือตัวอย่าง เช่นถ้าคุณเลือก prontera npcนั้นจะทำการข้ามไปยังบรรทัด prt โดยอัตโนมัส หรือถ้าคุณเลือก morocc npcนั้นจะทำการข้ามไปยังบรรทัด moc โดยอัตโนมัส ซึ่งคำสั่งนี้จะทำให้การสามารถเลือกข้อความที่ต้องการได้

Set variable;
Set variable, value;

คำสั่งนี้เป็นคำสั่งที่ค่อนข้างง่ายที่จะอธิบายแต่ยากในการใช้งาน นี่คือส่วนหนึ่งของผู้ที่ซึ่งเพึ่งหัดทำการเขียนNpc เพราะเนี่ยงจากยากในการตัดสินใจ เวลาสิ่งที่คุณควรจะใช้มันไม่คงที่ ทั้งหมดนี้มีคุณสมบัตินับไม่ถ้วนในการใช้งานอาศัยความชำนาญในการเขียนnpcไม่ง่ายเลยใ
นการใช้งาน
value ยึดการตีค่าการใช้งาน
คำสั่ง " set " ขึ้นอยู่กับจุดประสงค์ในการใช้และค่าที่ต้องการ

Variables เป็นชื่อของค่าที่ต้องการซึ่งถ้าชื่อนั้นใส่ " @ " ลงไปข้างหน้าจะทำให้ค่านั้นหายไปเมื่อServerถูกปิดลง แต่ถ้าไม่มี " @ " ข้างหน้าชื่อนั้นมันจะถูกบันทึกข้อมูลลงไปใน athena.txt ด้วย

If(comparison) goto label1;
นี่คือคำสั่งในการเช็คค่าต่างๆ เช่น level job ฯลฯ ถ้า (comparison) ถูกต้องจะข้ามไปยังบรรทัดที่ต้องการ แต่ถ้าผิดพลาด มันจะไม่ทำการข้ามและทำการทำงานในบรรทัดต่อไป

If(talked_once == 1) goto alreadytalked;
Mes "Welcome to TokoRo, glad to see you've joined!";
Set talked_once,1;
Close;
Alreadytalked:
Mes "Have a nice day!";
Close;

ตัวอย่างเช่น เริ่มแรกเมื่อคุยจะทำการsetค่าไว้ชื่อ 'talked_once ตั้งค่าไว้ที่ 1 และถูกปิดไป เมื่อทำการคุยอีกครั้งคำสั่ง if จะทำการข้ามไปยังบรรทัด alreadytalked ตามที่ถูกตั้งค่าเอาไว้

Input variable;

คำสั่งนี้ใช้ไว้ให้ใส่ตัวเลขลงภายในช่องนอกจากเมนู มันมีประโยชน์ในการใส่รหัสและซื้อของขายของเป็นจำนวนที่ต้องการ โดยสามารถใส่ได้เฉพาะตัวเลขเท่านั้นและจำเป็นต้องใช้ควบคู่กับคำสั่ง set ไว้ก่อน ซึ่งคำสั่งนี้เมื่อใส่จำนวน 0 จะเป็นการยกเลิก

Set serial;
Mes "What is the serial number on that package?";
Input serial;
If(serial == 123456789) goto correct;
Mes "Are you an idiot? It's right in front of you!!";
Close;
Correct:
Mes "Very good. Now hand it over and I will give you zeny for it.";
Close;


Getitem idnum,amount;

นี่คือคำสั่งในที่จะให้ item แก่ผู้เล่นนั้นโดยidnumคือidของitemที่ต้องการให้ใส่ลงไปและใส่จำนวนที่จะให้ในช่องa
mount

Getitem 501,10;

ตัวอย่างเช่นให้red 10 ea

Delitem idnum,amount;

นี่คือคำสั่งในที่จะลด item แก่ผู้เล่นนั้นโดยidnumคือidของitemที่ต้องการให้ใส่ลงไปและใส่จำนวนที่จะให้ในช่องa
mount

If(countitem(501)>10) goto collect;
Mes "Bring me back 10 Red Potions please";
Close;
Collect:
Mes "Are those potions for me?";
Delitem 501,10;
Close;

นี่ คือวิธีเช็ค จำนวนของ ว่ามีครบ 10 อันไหมถ้าเกิดไม่ครบก็จะข้ามไปยังบรรทัดนั้นๆ

Jobchange jobid;
คำสั่งนี้คือคำสั่งที่จะทำให้ตัวละครที่คุยจะเปลี่ยนอาชีพ

Jobchange 1;

ดังตัวอย่างนี้คุณก็จะเปลี่ยนอาชีพเป็น นักดาบ


Warp "mapname.gat",x,y;

วาปตัวละครไปยังmapที่ต้องการ ที่พิกัดxและy

warp "prontera.gat",156,187;

เช่นตัวอย่างวาปตัวละครไปยังเมืองpronteraตำแหน่ง156,187

Areawarp "from_map.gat",x0,y0,x1,y1,"to_map.gat",x2,y2;

อืมคำสั่งนี้ไม่ค่อยแน่ใจ100%นะ
คือคำสั่งนี้ เป็นคำสั่งการวาป from_map นั้นที่ซึ่งพิกัด x0 และ y0 กับ x1 และ y1 ซึ่งคนในตำแหน่งดังกล่าวจะถูกวาปไปยัง to_map ที่พิกัด x2 และ y2

Setlook aspect,value;

นี่คือคำสั่งที่เป็นการเปลี่ยนค่าviewหรือค่าสีเสื้อหรือสีผม ซึ่ง ' aspect ' นั้นมีดังนี้

0 - ตัวเลขของชุดจ็อบต่างๆ
1 - ทรงผมต่างๆ มีตั้งแต่ 0-19
2 - view ของอาวุธซึ่งจะเป็นลักษณะของอาวุธต่างๆ ซึ่งเลข 1 นั้นคือมีด
3 - view ของหมวกส่วนล่างซึ่งจะเป็นลักษณะของviewต่างๆ
4 - view ของหมวกส่วนกลางซึ่งจะเป็นลักษณะของviewต่างๆ
5 - view ของหมวกส่วนบนซึ่งจะเป็นลักษณะของviewต่างๆ
6 - สีผมต่างๆ มีตั้งแต่ 0-8
7 - สีเสื้อ โดยปกติมีตั้งแต่ 0-4 แต่มีคนทำมาอีกเป็น 77 สี
8 - view ของโล่
9 - view ของรองเท้า แต่ยังไม่มีspriteแต่ไม่แน่อาจมีคนกำลังทำอยู่

ซึ่งเป็นเรื่องที่ basic มากๆ โดยแค่เลือก aspect แล้วก็ตามด้วยตัวเลขที่ต้องการ

Setlook 6,4;

ตัวอย่างเช่นเปลี่ยนสีผมเป็นแบบที่ 4

Cutin "picname",mode;

นี่คือภาพที่จะแสดงขึ้นมาเมื่อคุย ดังเช่นภาพเมื่อคุยกับ kafra ซึ่งภาพนั้นสามารถทำเองได้อย่างง่ายดาย
และ mode นั้น ส่วนใหญ่จะใช้ 2คือแสดงภาพ และ 255 คือเอาภาพออก

Cutin "kafra_01",2;
Mes "Welcome to Kafra services!";
Next;
Mes "Sorry, but I am a crappy Kafra and don't have any options yet.";
Cutin "kafra_01",255;

ดังตัวอย่าง บรรทัดแรกคือทำให้ภาพแสดงและบรรทัดสุดท้ายจะปิดภาพที่แสง

Viewpoint type,x,y,id,color;

นี่คือคำสั่ง แสดงจุดบนแผนที่ ซึ่งแทนด้วย

Type - รูปร่างของจุดบนแผนที่ และจะใส่ 0 เมื่อต้องการปิดจุดที่แสดงบนแผนที่
X - x คือพิกัดบนแผนที่
Y - y คือพิกัดบนแผนที่
Id - ลง id ของจุดแสดง ซึ่งจำเป็นต้องใช้
Color - สีของภาพต้องใส่ เป็นเลขฐาน16

Viewpoint 1,113,127,2,0x999999;
Mes "I marked the the puke I saw for you on your minimap. Go clean it up";
Next;
Mes "Haha, just kidding, there's no puke.";
Viewpoint 0,0,0,2,0;

ตัวอย่าง บรรทัดแรกลงจุดแสดงลงแผนที่ พิกัด113,127และมี id เป็น 2และในบรรทัดสุดท้าย จะปิดสีพิกัดซึ่งต้องลง id ให้ตรงกันและสี = 0 พิกัดต้อง = 0,0

Heal hp,sp;
คำสั่งเพิ่มเลือด ใส่จำนวนที่ต้องการลงไป

Heal 200,75;

ตัวอย่าง เพิ่มเลือด 200 เพิ่มsp 75

แต่ถ้าใส่เป็น heal-200,-75; จะเป็นการลดเลือดแทน

Itemheal hp,sp;

คำสั่งเพิ่มเลือดที่ใช้สำหรับ item แต่เมื่อใช้กับ npc skill ของ alchemit จะมีผมด้วย

Mes "Wow, you are barely alive, let me use of my red potions on you.";
Itemheal 40,0;

นี่คือตัวอย่าง ความจริงแล้วมันจะใช้ตัวนี้skill recoveryจะมีผลทำให้มีเพิ่มขึ้นด้วย

Percentheal hp,sp;

นี่คือคำสั่งเพิ่มเลือดเป็นแบบ %

Percentheal 50,25;

ตัวอย่างจะเป็น เพิ่มเลือด50%ของhpทั้งหมดและเพิ่มsp25%ของspทั้งหมด

Successrefitem slot;

ตีบวกสำเร็จในช่องใส่ตัว 'slot' โดยใส่ตัวเลขลงไป

Successrefitem 4;

ตัวอย่างจะเป็นการตีบวกสำเร็จของช่อง 4 (อาวุธมือขวา)


Failedrefitem slot;
ตีบวกไม่สำเร็จในช่องใส่ตัว 'slot' โดยใส่ตัวเลขลงไป

Failedrefitem 4;

ตัวอย่างจะเป็นการตีบวกไม่สำเร็จของช่อง 4 (อาวุธมือขวา)

Statusup type;

เพิ่มStatusอย่างใดอย่างหนึ่งเพิ่มมา1ตลอดเวลาไม่ใช่bonus status

13 - Str
14 - Agi
15 - Vit
16 - Int
17 - Dex
18 - Luk

Statusup 16;

ตัวอย่างจะเป็นการเพิ่ม int 1 โดยปกติแล้วถ้ามี int 99 แล้วคำสั่งนี้จะไม่ทำงาน

Statusup2 type,value;

จะเป็นคำสั่งเพิ่ม status แบบคิดค่า status point และลด status point ลงไป

Statusup2 18,20;

ตัวอย่างจะเพิ่ม luk 20 แต่จะลดstatus point ไปด้วย

Bonus type,value;
Bonus2 type1,type2,value;
Bonus3 type1,type2,type3,value;

คำสั่งนี้จะเป็นการเพิ่ม bonus status แทน

'Bonus' คือคำสั่งที่เพิ่ม status และอะไรก็ตาม ซึ่งประเภทstatusจะเป็นstatus bonus และค่า 'value' เป็นจำนวนที่ต้องใส่ลงไป

'Bonus2' คือคำสั่งประเภทธาตุและประเภทของmoster 'type1' นั้นจะใส่ ประเภทลงไป 'type2' จะใส่ประเภทลงไป 'value' เป็าจำนวนที่ต้องการใส่ลงไป

'Bonus3' คือคำสั่งที่จะเพิ่มโอกาศหรือทำให้มีการdropของที่เราใส่ลงไป 'type1'นั้นควรที่จะต้องใส่ 'bAddMonsterDropItem' ลงไป 'type2' ให้ใส่idของitemลงไป 'type3' ใส่ประเภทของmosterที่จะให้มีdropลงไป 'value' ใส่จำนวนลงไป

Skill id,level;
Skill id,level,flag;

ส่วนคำสั่งนี้คือคำสั่งเพิ่มskillให้กับตัวละครซึ่ง 'flag' คือ option ซึ่ง 1 คือค่าปรกติ

Skill 28,1;

ตัวอย่างจะเพิ่มskill heal เลเวล1 ดังเช่นการ์ด vitata


คือคำสั่งที่มีผลคือจะปิดหน้าต่างข้อความโดยจะปิดทันทีที่ถึงบรรทัดที่มีข้อความ end;

Setoption value;

คำสั่งนี้คือคำสั่ง option มีผมเช่นเดียวกับคำสั่งgm @option และเมื่อใส่ 0 จะเป็นการclear optionทั้งหมด

Setcart type;

ให้หรือถอดรถเข็นของตัวละครแต่ต้องมีskillก่อน เมื่อใส่ตัวเลขตั้งแต่ 0-6 และเมื่อใส่ 0 จะเป็นการถอดรถเข็น ส่วน1คือใส่รถเข็นตามปรกติ

Setfalcon;

ให้นกกับตัวละครแต่ต้องมีskillก่อน

Setriding;

ให้pecopecoกับตัวละครแต่ต้องมีskillก่อน

Savepoint "mapname.gat",x,y;

saveจุดให้ตัวละคร

Openstorage;

เปิดช่องเก็บของ

Itemskill skillid,level,"Display text";

npcใช้ระบุskillและเลเวลskill ส่วน 'displayed text' คือข้อความที่จะแสดงบนหัวตัวละครเมื่อใช้งาน

Produce type;

เป็นคำสั่งที่จะเปิดหน้าต่างทำitem ซึ่ง 'type' นั้นที่ทราบจะมีดังนี้

1 - อาวุธเลเวล1
2 - อาวุธเลเวล2
3 - อาวุธเลเวล3
16 - stones and minerals
32 - achlemit

Monster "mapname.gat",x,y,"displayname",id,amount;
Monster "mapname.gat",x,y,"displayname",id,amount,event;

คำสั่งนี้เป็นคำสั่งสร้างเสกmonsterที่mapและพิกัดนั้นๆส่วน 'displayname' จะเป็นชื่อของmosterที่เรียกออกมาและ 'id' คือidของmosterต้องใส่ลงไปและ 'amount' คือจำนวนmosterและ 'event' คือชื่อeventของmosterเมื่อเรียกออกมา

Monster "prontera.gat",150,145,"DoomBlob",1002,600,"goodjob";

ดังตัวอย่าง จะเสกporing600ตัวที่เมืองpronteraณ พิกัด150,145มีชื่อว่าDoomBlobมีชื่อeventว่าgoodjob

Areamonster "mapame.gat",x0,y0,x1,y1,"displayname",id,amount;
Areamonster "mapame.gat",x0,y0,x1,y1,"displayname",id,amount,"event";

มีผลเช่นเดียวกับ อันบนแต่จะเป็นแบบพื้นที่ ซึ่งเป็นแบบ x0,y0 และ x1,y1

Areamonster "prontera.gat",20,20,220,220,"DoomBlob",1002,600,"goodjob";

ดังตัวอย่าง จะเสกporing600ตัวที่เมืองpronteraภายในพื้นที่ของพิกัด20,20และ220,220มีชื่อว่าDoo
mBlobมีชื่อeventว่าgoodjob

Killmonster "mapname.gat","event";

ฆ่าmonsterในmapนั้นๆและที่มีeventนั้นๆ

Doevent "event";

เรียกให้ event นั้นๆทำงานที่อยู่ภายในfileเดียวกันทันที

Addtimer wait,"event";

เรียกให้ event นั้นๆทำงานที่อยู่ภายในfileเดียวกันแต่ 'wait' จะเป็นการระบุเวลาถอยหลังก่อนเริ่มทำงาน ซึ่ง 1000 เท่ากับ 1วินาที

Deltimer "event";

เรียกให้ event นั้นๆหยุดทำงานที่อยู่ภายในfileเดียวกันทันที

Addtimercount "event",value;

อืมคิดก่อนๆ อันนี้ไม่แน่ใจนะ
1) ใส่ค่า 'value' เพื่อเป็นการทำให้eventทำงานโดยนับเป็น 1000 เท่ากับ 1 วินาที หรือ
2) ใสค่า 'value' ใช้นับถอยหลังให้ทำงานั่นหละ

Announce "text",who;

คำสั่งนี้คือคำสั่งแสดงข้อความขึ้นมาแบบข้อความgmหรือข้อความประกาศ ซึ่งใส่ตัวเลขลงใน 'who' จะมีผลดังนี้
0 - ทุกmap
1 - ภายในพื้นที่นั้นๆ
2 - ตนเอง
3 - ทั้งหมด

Mapannounce "mapname.gat","text",flag;

ประกาศข้อความลงในmapนั้นๆเท่านั้น

Areaannounce "mapname.gat",x0,y0,x1,y1,"text",flag;

ประกาศข้อความลงในmapนั้นๆและบริเวณนั้นซึ่งจะเป็นแบบพื้นที่ x0,y0 และ x1,y1

Enablenpc "name";

เปิดnpcนั้นๆไม่ให้ทำงาน**แต่ต้องอยู่ในfileเดียวกัน

Disablenpc "name";

ปิดnpcนั้นๆไม่ให้ทำงาน**แต่ต้องอยู่ในfileเดียวกัน

Sc_start type,time,value;

ใส่ประเภทของstatus(อาการผิดปรกติ)ที่ต้องการลงไปใน 'type' และเวลาที่ทำงานนานเท่าใด ซึ่งค่าstatus(อาการผิดปรกติ)นั้นดูได้ที่ const.txt และต้องลงท้ายด้วย Sc_end type; ทุกครั้ง

Debugmes "text";

คำสั่งนี้เป็นเครื่องมือที่เหมาะสมมากๆกับการหาข้อผิดพลาดของscripts มันง่ายๆโดยแสดงข้อความลงใน 'text' อละไปแนวทางของรายละเอียดอื่นๆที่แสดงผลในหน้าต่าง map-server.exe ของคุณ ถ้าnpcของคุณทำงานผิดพลาด จะทำการแก้ไขให้ถูกต้อง

Catchpet id;
คำสั่งนี้ใช้สำหรับ จับQ-pet โดนใส่id mosterลงใน 'id'

Bpet;

คำสั่งนี้ทำให้สามารถจับ pet โดยไม่ค้นหาก่อนจับ ซึ่งจะสามารถจับได้หมดทุกอย่าง

Resetstatus;

คำสั่งนี้คือคำสั่งresetค่าstatusของตัวละครแปรงมาเป็นstatus point

Resetskill;

คำสั่งนี้คือคำสั่งreset skillของตัวละครแปรงมาเป็นskill point

Changebase value;

คำสั่งนี้ เป็นการเปลี่ยน job ของคุณโดยใส่ 'value' เป็นตัวเลข

Changesex;

เปลี่ยนเพศของคุณเป็นเพศตรงข้าม เช่นชายเป็นหญิง หญิงเป็นชาย มีผลกระทบคือจะทำให้ อาชีพbardและdancerของคุณเปลี่ยน เช่นbardจะเปลี่ยนเป็นdancer dancerจะเปลี่ยนเป็นbard
ข้อควรระวัง* คำสั่งนี้จะเปลี่ยนทั้งidของคุณ

Waitingroom "title",limit;
Waitingroom "title",limit,"event";

คำสั่งนี้คือคำสั่งแสดงข้อchatบนหัวnpcของคุณโดยข้อความของห้องchatนั้นจะอยู่ใน ' title ' และจำนวนที่คนสามารถเข้าได้จะมีอยู่ที่ ' limit ' โดยใส่ตัวเลขลงไปส่วน ' event 'นั้นจะทำให้เป็นการเปิดปิดห้องchatบนหัวnpc


OnInterIfInit:
Waitingroom "ตัวอย่าง",0;
End;

OnInterIfInit:
Waitingroom "ตัวอย่าง",0,"Ex";
End;

Warpwaitingpc "mapname.gat",x,y;

คำสั่งนี้ต้องมีคำสั่ง waitingroom ทำงานอยู่ก่อนถึงจะทำงานได้ ซึ่งคำสั่งนี้จะทำการ warp คนทั้งหมดไปยังmapและพิกัดที่เรากำหนด

Setmapflagnosave "mapname.gat","newsave.gat",x,y;

คำสั่งนี้จะทำให้ไม่สารถsaveตัวละครเมื่อออกจากเกมส์และจะทำการsaveให้ในจุดใหม่และพ
ิกัดใหม่ที่เรากำหนดไว้

Setmapflag "mapname.gat",type;

กำหนดค่าของสภาพmap เช่น ให้ไม้ผีไม่ได้,ใช้teltportไม่ได้,ฯลฯ โดยดูtypeที่ const.txt

Removemapflag "mapname.gat",type;

ทำการยกเลิกmapflagในmapนั้นๆและประเภทนั้นๆ

Pvpon "mapname.gat"

เปิดpvpในmapนั้นๆ

Pvpoff "mapname.gat"

ปิดpvpในmapนั้นๆ

Gvgon "mapname.gat"

เปิดgvgในmapนั้นๆ


Gvgoff "mapname.gat"

ปิดgvgในmapนั้นๆ

Emotion type;

แสดง emotion บนหัว npc นั้นๆโดยลงค่าตัวเลขลงบน 'type'

Maprespawnguildid "mapname.gat",id,flag;

เมื่อใส่ flag เป็น 1 จะเป็น การเรียกภาพให้แสดงลงบนธงกิลโดยใส่ ' id ' เพื่อทำการแสดง
เมื่อใส่ flag เป็น 2 จะเป็น การเรียกภาพใดภาพหนึ่งโดยไม่สนmapที่ใส่ไว้โดยใส่ ' id ' เพื่อทำการแสดง
และจดจำid guildนั้นๆไว้(ไม่ใช่ชื่อguild)

Agitstart;

คำสั่งเปิดGuild war

Agitend;

คำสั่งปิดGuild war

Setcastledata "mapname.gat",type,value;

กำหนดค่า ' value ' เกี่ยวกับข้อมูลของ ' type ' ของปราสาทบนmapนั้นๆ

Function Calls:

Rand(range)

เอาอย่างง่ายเลยนะ ซึ่งอันนี้จะใช้ร่วมกับคำสั่ง set โดยการสุ่มค่าตัวเลข

Mes "Pick a number between 0 and 9.";
Set rightnum,rand(10);
Input guess;
If(guess==rightnum) goto winner;
Mes "You are wrong, go away now.";
Close;
Winner:
Mes "Wow, you must be psychic! Here's 10 zeny!";
Set Zeny, Zeny+10;
Close;

เมื่อ ใส่ (100) มันจะทำการrandomจำนวน10ตัวเลข จะเริ่มตั้งแต่ 0 ดังนั้นคำสั่งนี้จะสุ่มตั้งแต่เลข0ไปถึงเลข9และถ้าเราใส่เป็น (5) ก็จะเป็นการสุ่มเลข0ไปถึงเลข4

Countitem(idnumber)

เอาอย่างง่ายเลยนะ ซึ่งอันนี้จะใช้ร่วมกับคำสั่ง if ซึ่งจะเป็นการเช็คitemด้วยโดยใช้idของitemและตรวจดูจำนวนitemนั้นๆ

If(countitem(501)>10) goto collect;
Mes "Bring me back 10 Red Potions please";
Close;
Collect:
Mes "Are those potions for me?";
Close;

ฮ้า ตัวอย่างจะทำการเช็คว่าตัวละครมีrad potions มีครบ10อันหรือไม่ถ้ามีมากกว่าจะไปยังอีกบรรทัดนึง

Checkweight(itemid,amount)

เอาอย่างง่ายเลยนะ ซึ่งอันนี้จะใช้ร่วมกับคำสั่ง if ซึ่งจะเป็นเช็คน้ำหนักด้วยitemและจำนวนitem

If(checkweight(501,100)==1) goto givepotions;
Mes "You should lighten up some, I can't give you these pots as it is.";
Close;
Givepotions:
Getitem 501,100;
Mes "Here ya go!";
Close;

ตัวอย่างที่เห็น จะเป็นการเช็คว่าตัวละครนั้นมีน้ำหนักเหลือพอที่จะเอาredpotion 100 ea มั้ย

Readparam(type)

อันนี้มักใช้กับ mes จะแสดงค่า status ของตัวละครโดยดูที่ const.txt โดยจะแสดงออกมาเป็นตัวเลข
Tipวิธีใช้ง่ายๆมีดังนี้
mes "คุณมีStr + readparam(13) ";
mes "คุณมีAgi + readparam(14) ";
mes "คุณมีVit + readparam(15) ";
mes "คุณมีInt + readparam(16) ";
mes "คุณมีDex + readparam(17) ";
mes "คุณมีLuk + readparam(1 ";
mes "คุณมีMaxHp + readparam(6) ";
mes "คุณมีMaxSp + readparam( ";
mes "คุณมีเงิน + readparam(20) Zeny";

Getcharid(flag)

อันนี้จะแสดง id ของparty หรือ id ของguild โดยเมื่อใส่ ' flag 'เป็น1จะเป็นidของparty และเมื่อใส่เป็น 2จะเป็นidของguild

Getpartyname(id)

อันนี้มักใช้กับคำสั่ง mes จะแสดงชื่อpartyโดยจะอ่านจากid party
Tipวิธีใช้ง่ายๆมีดังนี้
1.เริ่มบรรทัดแรก
set @ PartyID, getcharid(1);
2.อันนี้ก็เสร็จแล้ว
getpartyname( @ PartyID)
3.เช่น
mes "ชื่อ Party ของคุณคือ" + getpartyname( @ PartyID) "ขอให้สนุกนะครับ";

อันนี้ คือ อันที่ผิด
getpartyname( getcharid(1) )
ไม่ต้องเอาไปใช้นะครับ ผิดครับ

Getguildname(id)

อันนี้มักใช้กับคำสั่ง mes จะแสดงชื่อguildโดยจะอ่านจากid guild
Tipวิธีใช้ง่ายๆมีดังนี้
1.เริ่มบรรทัดแรก
set @ GuildID, getcharid(2);
2.อันนี้ก็เสร็จแล้ว
getguildname( @ GuildID)
3.เช่น
mes "ชื่อ Guild ของคุณคือ" + getguildname( @ PartyID) "ขอให้สนุกนะครับ";

Getguildmaster(id)
อันนี้มักใช้กับคำสั่ง mes จะแสดงชื่อของmaster guildจากidที่ลงไว้
Tipวิธีใช้ง่ายๆมีดังนี้
1.เริ่มบรรทัดแรก
set @ MasterGuildID, getcharid(2);
2.อันนี้ก็เสร็จแล้ว
getguildmaster( @ MasterGuildID)
3.เช่น
mes "ชื่อ Master Guild ของคุณคือ" + getguildmaster( @ MasterGuildID) "ขอให้สนุกนะครับ";

Strcharinfo(flag)

อันนี้มีค่าเท่ากับ getcharid() และ ' flag ' จพใส่ได้ดังนี้
-0 คือจะแสดงชื่อตัวละคร
-1 คือจะแสดงชื่อparty
-2 คือจะแสดงชื่อguild

อันนี้จะแสดงชื่อของ item ที่สวมใส่ โดยใส่ตัวเลขลงใน 'slot' เป็นตัวเลขของตำแหน่ง

Getequipisequiped(slot)

กลับมาที่ 1 ถ้ามีอะไรใส่อยู่ใน 'slot ' ที่บอกไว้มิฉะนั้นจะกลับมาเป็น 0

Getequipisenableref(slot)

กลับมาที่ 1 ถ้าitemในช่องสามารถที่จะตีได้ มันจะไม่ทำการเช็คว่าอุปกรณ์ที่จะตีมีเลเวลเกิน10รึเปล่า และถ้าเกิดตีบวกพลาดนั้นจะกลับมาที่ บวก 0 เหมือนเดิมจะไม่หายไป

Getequipisidentify(slot)

Returns a 1 if the item in 'slot has been identified. Returns a 0 if it is unidentified, or if there is nothing equipped there.


Getequiprefinerycnt(slot)

ตัวเลขที่แสดงออกมาเป็นจำนวนที่ของที่ใส่ใน 'slot' นั้นถูกตีบวกเท่าไหร่ ถ้าแสดงเป็น 0 แปลว่าite,นั้นๆยังไม่ได้ถูกตีบวกหรือไม่ได้ใส่อะไรเลย เมื่อใช้กับ npc ตีบวก จะจดจำเพื่อเช็คจำนวนที่บวกไปแล้วไม่ให้เกิน10

Getequipweaponlv(slot)

กลับมาที่ เลเวลของอาวุธในช่อง 'slot' ใช้ได้เฉพาะ 4(มือขวา) หรือ 3(มือซ้าย) ลงใน 'slot' สำหรับคำสั่งนี้

Getequippercentrefinery(slot)

กลับมาที่การตีบวก อันนี้สามารถตีบวกได้ตั้งแต่ 0-100 โดยจะสำเร็จทุกครั้ง

Getskilllv(skillid)

อันนี้จะแสดงจำนวนskillเลเวลโดยดูที่ 'skillid' ถ้าตัวละครนั้นไม่มีskillนั้นจะแสดงเป็น 0

Basicskillcheck()

เช็คในบรรทัดของ battle_athena.conf ข้อความว่า
"basic_skill_check: yes/no"
ใส่ 1 ลงไปเมื่อ ไม่ได้ตั้งค่าที่ no

Getgmlevel()

ให้ gm level กับidนั้นของตัวละครที่คุยถ้าใส่0จะทำให้เป็นidปรกติ

Checkoption(type)

เช็คสถานะตัวละครโดยใส่ 'type' ลงไปถ้าใส่ 1 คือเปิดไว้ถ้าใส่ 0 คือปิดไว้

Getusers(flag)

อันนี้ถ้าใส่ ' flag ' เป็น 0 จะแสดงจำนวนคนที่อยู่ในmapนั้นแต่ถ้าใส่1จะแสดงจำนวนคนที่อยู่ภายในเกมส์

Getmapusers("mapname.gat")

แสดงจำนวนคนที่อยู่ในmapนั้นๆ

Getareausers("mapname.gat",x0,y0,x1,y1)

แสดงจำนวนคนภายในmapนั้นๆ เป็นแบบพื้นที่ x0,y0 และ x1,y1

Getcastlename("mapname.gat")

แสดงชื่อปราสาทที่อยู่ในmapนั้นๆ

Getcastledata("mapname.gat",type)

กลับมาที่ ข้อมูลของปราสาทในmapนั้นๆ แต่ตอนนี้ยังไม่สามารถรู้ว่า 'type' มีอะไรบ้าง แต่มันจะมาในเร็วๆนี้

ใช้กับ " set " :

+ บวก
- ลบ
* คูณ
/ หาร
% เปอร์เซ็น
& และ
| หรือ
^ ยกกำลัง
! ไม่

ใช้กับ " if " :

== มีค่าเท่ากับ
!= มีค่าไม่เท่ากับ
> มีค่ามากกว่า
< มีค่าน้อยกว่า
>= มีค่าเท่ากับหรือมากกว่า
<= มีค่าเท่ากับหรือน้อยกว่า
&& และ
|| หรือ

isequipped(000,000);
เช็คของที่ใส่