การเขียน 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
นะครับอันนี้งงมากต้องค่อยๆ อ่านนะครับ