Ragnarok~Cluber more...
ก่อตั้งโดย pattakan
กระทู้: การเขียน Npc 4 การ Add Npc
การเขียน Npc 4 การนำไปใช้

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

บ่อย ๆ จะทำให้เราชำนาญได้เลย

จากที่ดูแต่ละกระทู้จะมี npc ตัวอย่าง มาให้ เราจะมาอธิบาย Script นั้น ๆ กัน

คำสั่งที่เขียนบ่อย

mes   = คำพูดที่ให้ npc พูด

next  = เปลี่ยนหน้า (มีปุ่มกด next ขึ้นมา)

menu  = เป็นตัวเลือก เช่น yes  no (หรือเป็นอย่างอื่นก็ได้แล้วแต่จะใส่ลงไป)

close   = จบ Script แล้วจะมีปุ่ม close ขึ้นมาให้ปิด

if (   ) go to ... = หมายถึงว่า ถ้า(...)ให้ไปที่ลิงค์นั้น เช่น if (countitem(501) < 5) goto noitem;

                     ก็จะแปลว่า ถ้า (นับไอเทม red potion น้อยกว่า 5)ไปที่ลิงค์ noitem

getitem = ได้รับไอเทม

delitem  = ลบไอเทม

คำสั่งพวกนี้จะเจอได้กับ Script พวกนี้

morocc,184,72,2    script    test    709,{

mes "Hello, สวัสดี.";

mes "ผมจะถามคำถามคุณข้อนึง";

mes "ถ้าคุณตอบถูกจะได้ของรางวัล";

next;

mes "10+42 = ?";

menu "52",yes,"42",no;

yes:

mes "ดีใจด้วย คุณตอบถูก";

getitem 501,100;

close;

no:

mes "เสียใจคุณตอบผิด";

close;

}

จบ Script แรก ถ้าดูปกติไม่เข้าใจก็ให้เอา Script ไปลงเซิฟเลยแ้ล้วลองดูว่าเป็นอย่างไร แต่จะอธิบายเสริมนิดนึง

เมื่อแปล Script นี้ก็จะเป็น

npc อยู่ที่ morroc พิกัดที่ 184,72 หันหน้าไปทางทิศตะวันตก ชื่อว่า test รูป npc 709

เมื่อพูดคุยไปเรื่อย ๆ จะมีเมนูออกมาให้เลือกคำตอบที่ถูกต้อง เมื่อตอบถูกจะได้ red potion 100 ขวด ถ้าตอบผิดจะ

ไม่ได้อะไรเลย



....เราจะมาลองเขียน Npc กัน....

ก่อนอื่นคือ เราจะทำการเขียน npc แบบด้านบน โดยเริ่มจากบรรทัดแรก

morocc,184,72,2(tap)script(tap)test(tap)709,{

(tap) หมายถึง ให้กดปุ่ม tap นะครับ หลายคนกด spacebar จะทำให้ npc ใช้ไม่ได้นะครับ

บรรทัดต่อไป

mes(spacebar)"Hello, สวัสดี";

(spacebar) หมายถึงให้กดปุ่ม spacebar ไม่ใช้ tap นะ

สังเกต ดูว่าเมื่อจะให้ npc พูดต้องมีคำว่า mes เสมอ

คำพูดที่จะให้ npc พูดต้องอยู่ใน " " เสมอ และเมื่อจบบรรทัดนั้นแล้วให้ใส่ ; เพื่อปิดบรรทัด

และก็ ใส่ next เพื่อเปลี่ยนหน้าพูดคุย ไม่ควรให้หน้านึงเยอะเกินไป

ต่อไป... คำสั่ง menu

menu(spacebar)"52",yes,"42",no;

บรรทัดนี้ npc จะมี เมนูขึ้นมาให้เราเลือกว่า 52 หรือ 42 ... ถ้าเราเลือก 52 ก็จะไปที่ลิงค์ yes ถ้าเลือก 42 ก็ no

เมื่อเรากำหนดลิงค์ให้มี yes กับ no แล้ว เราต้องสร้างลิงค์นั้นขึ้นมาด้วย

yes:

เราสามารถสร้างได้โดยการพิมพ์ ชื่อลิงค์ลงไปแล้วตามด้วย : แบบด้านบน

ในลิงค์นี้ คือ (ถ้าตอบคำถามจาก mes "10+42 = ?"; ถูก ก็จะมาที่ลิงค์นี้)

getitem(spacebar)501,100;

และถ้าตอบถูก เราจะให้อะไรก็ใส่ไป เช่น เราจะให้ npc ให้ Red potion 100ea ก็ใส่บรรทัดนี้ลงไป

(สามารถศึกษาคำสั่ง npc ได้จาก กระทู้ที่ 3 นะครับ) และเมื่อจบลิงค์ yes ก็ต้องปิดลิงค์ด้วยการใส่

close; ลงไป  จบแล้ว ลิงค์ yes

ต่อไปคือ ลิงค์ no

ก็ใส่ไปตามปกติ คือ  no: (สร้างลิงค์) สำหรับ script นี้ คนที่ตอบคำถามผิดก็จะไม่ได้อะไรเลยก็

ไม่ต้องใส่อะไรแล้วครับให้ปิดมันด้วย close; เลยแบบด้านล่าง

no:

close;

แต่ถ้าอยากให้มีข้อความแสดงความเสียใจก็ใส่ไปด้วยก็ได้ แล้วแต่เรา

no:

mes "เสียใจคุณตอบผิด";

close;

แล้วก็ปิด script ด้วย } เสมอนะครับ อย่าลืมๆ ... ให้สังเกตว่าบรรทัดทุกบรรทัดจะมี ; เสมอ อย่าลืมใส่ ; นะ

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

คือ... if (   ) goto ...  (คำสั่งนี้จำเป็นมาก ถ้าไม่เข้าใจก็ลำบากล่ะครับ) คำสั่งนี้จริงๆ แล้วถ้าเราเติมลงไปจะเป็น

if (countitem(501) < 5) goto noitem;         <<< ยกตัวอย่างนะ

สามารถแปลตามตัวได้เลยครับ หมายถึง ถ้านับไอเทม (501) น้อยกว่า 5อัน ให้ไปที่ลิงค์ noitem

อันนี้ก็ไม่ยากนะครับคือเรารู้เรื่อง การกำหนด ลิงค์ แล้ว เพราะฉะนั้น ถ้าเรามีบรรทัดนี้

if (countitem(501) < 5) goto noitem;

ก็ต้องสร้างลิงค์ noitem ขึ้นมาด้วย แล้วก็ปิดลิงค์ให้เรียบร้อยด้วยล่ะ (ชื่อลิงค์ ไม่จำเป็นต้อง noitem เป็นอย่างอื่นก็ได้)

เอาล่ะเรามาดูตัวอย่างกัน ด้านล่างนี้เลยครับ.........

morocc,184,72,2    script    test    709,{

if (countitem(909) > 100) goto get;

if (countitem(909) < 100) goto -;

mes "Hello, สวัสดี.";

mes "ท่านสามารถช่วยข้าเรื่องนึงได้ไหม";

mes "ข้าต้องการคนช่วยด่วนเลย";

menu "ได้เลย",-,"ข้าไม่มีเวลาว่าง",no;

mes "ข้าต้องการ Jellopy 100 อัน";

mes "เพื่อแลกกับ red potion 200 ขวด";

mes "ท่านช่วยไปหามาได้ไหมข้าต้องการด่วน";

menu "ได้สิ ไม่มีปัญหา",-,"ข้าขี้เกียจหาอ่ะ",no;

mes "ก็ช่วยหน่อยนะ";

close;

get:

mes "ว้าว ท่านหามาให้ข้าครบแล้ว";

mes "ข้าจะให้ของตอบแทนแก่ท่าน";

delitem 909,100;

getitem 501,200;

close;

no:

mes "ไม่เป็นไร ถ้าท่านอยากจะช่วยก็มาหาใหม่ได้";

close;

}

ไม่มีอะไรยากครับเขียน script เหมือนเดิมครับแต่ปัญหาคือ 3 บรรทัดนี้ครับ

if (countitem(909) < 100) goto -;

menu "ได้เลย",-,"ข้าไม่มีเวลาว่าง",no;

menu "ได้สิ ไม่มีปัญหา",-,"ข้าขี้เกียจหาอ่ะ",no;

ตัวที่เน้นสีแดงนี่นะครับ เราไม่ต้องสร้างลิงค์ -: แบบนี้นะ แต่ - หมายถึงว่าต่อลงไปด้านล่าง คือเราไม่ต้องสร้างลิงค์แต่เราต้องปิดลิงค์นะ

ตัวอย่างเช่น

menu "ได้สิ ไม่มีปัญหา",-,"ข้าขี้เกียจหาอ่ะ",no;

mes "ก็ช่วยหน่อยนะ";

close;

หมายถึง ถ้าเราเลือก ได้สิไม่มีปัญหา npc ก็จะพูดต่อเลยว่า ก็ช่วยหน่อยนะ แต่ถ้าเราจะทำแบบด้านล่างนี้ก็ได้เหมือนกัน

menu "ได้สิ ไม่มีปัญหา",yes,"ข้าขี้เกียจหาอ่ะ",no;

yes:

mes "ก็ช่วยหน่อยนะ";

close;

แต่ถ้ายัง งง อยู่ก็ให้ใช้ yes แทน - ไปก่อนก็ได้แต่สำหรับใครที่เข้าใจแล้วก็ใช้ได้ไม่มีปัญหาครับ

การเขียน npc ก็มีแค่นี้แหละ คือการนำคำสั่ง npc ต่างๆ มาใส่ ลงไปจบ...



สุดท้ายแล้ว ด้านล่างคือการทำให้ npc ตั้งห้องบนหัว (ตั้งห้องเฉย ๆ เราเข้าไปคุยไม่ได้นะ)

OnInit:

waitingroom "คำที่จะให้ตั้งห้อง",0;

end;

จบแล้วครับการเขียน Npc สนทนาต่างๆ และ Npc ขายของ  กระทู้ต่อไปคือ... npc warp

นะครับอันนี้งงมากต้องค่อยๆ อ่านนะครับ

โพสต์โดย
pattakan

12 มี.ค. 53 เวลา 14:45 648