เคล็ดลับสำหรับการใช้กลไกการค้นหา MMO?


14

คุณควรแนะนำเครื่องมือรูปแบบหรือแนวทางปฏิบัติที่ดีที่สุดในการปรับใช้กลไกการค้นหาที่ระบุด้านล่างนี้

ฉันกำลังพูดถึงสถาปัตยกรรมซอฟต์แวร์ (ควรเป็นแบบทั่วไป) และตัวเลือกสำหรับการเดินสายวัตถุการสมัครสมาชิกกิจกรรมและการแสดงเงื่อนไข ยินดีต้อนรับการกล่าวถึงเครื่องมือ / ไลบรารีที่คุณใช้เสร็จแล้วยินดีต้อนรับ แก้ไข:หากคุณใช้งานสคริปต์คุณแนะนำการตั้งค่าแบบใด

ที่ต้องการ:

  • ง่าย 2D mmo (rpg)
  • ข้อมูลเกมทั้งหมดรวมถึงเควสจะถูกเก็บไว้ในฐานข้อมูลเชิงสัมพันธ์
  • เหตุการณ์ใด ๆ ในเกมสามารถกระตุ้นการแสวงหาใหม่สำหรับผู้เล่นหรือความก้าวหน้าของภารกิจที่มีอยู่
  • การสืบเสาะสามารถมีเงื่อนไขตามจำนวนที่ต้องการก่อนที่ผู้เล่นจะสามารถทำภารกิจได้
  • เควสสามารถประกอบด้วยเควสย่อย / ขั้นตอนจำนวนเท่าใดก็ได้พร้อมเงื่อนไขโดยพลการ
  • ภารกิจจะมีตั้งแต่ง่าย ๆ :

    คุยกับ A - kill 5 B - คุยกับ A - เพิ่มสุขภาพอย่างถาวร

  • ค่อนข้างเกี่ยวข้อง:

    ใช้ไอเท็มในพื้นที่ X - ไปที่พื้นที่ Y - บอทจะวางไข่ - ฆ่าบอทโดยไม่ได้รับความเสียหายมากกว่า 10% - บอทดรอปไอเทม - รับไอเทม - ปลดล็อกพอร์ทัล - ส่งไอเท็มไปยัง J หลังพอร์ทัล - รับทองคำและประสบการณ์ อนุญาตให้ผ่านพอร์ทัลอีกครั้ง - ล็อคพอร์ทัลสำหรับผู้เล่นนี้

  • อินสแตนซ์ระดับเป็นไปได้ (ผู้เล่นสามารถทำภารกิจบางอย่างให้เสร็จในทีมหรือการแยกซึ่งจะวางตำแหน่งระดับสำหรับผู้เข้าร่วมเหล่านั้น)

  • เควสควรจัดการได้ดีกว่าโดยใช้เครื่องมือแก้ไขโลกโดยไม่ต้องมีความรู้ด้านการเขียนสคริปต์หรือการเขียนโปรแกรม ( แก้ไข:ไม่สนับสนุนการทำสคริปต์โดยทั่วไป)
  • ฉันถือว่า C ++ เป็นภาษาของการใช้งาน

ฉันคิดว่าถ้าฉันสามารถรวมเหตุการณ์และเงื่อนไขใด ๆ เราสามารถสร้างแบบจำลองที่ซับซ้อนมากขึ้นและอาจมีส่วนร่วมมากขึ้น ฉันทดลองใช้การหมุนเครื่องยนต์ ECA (กิจกรรม - เงื่อนไข - การกระทำ) ของตัวเอง แต่นั่นอาจจะเกินกำลัง เป็นการยากที่จะจำลองแบบเงื่อนไขทั่วไปโดยไม่ใช้สคริปต์ชนิดใด ๆ


มีเหตุผลเฉพาะใด ๆ ที่ทำให้คุณเลือกที่จะข้ามสคริปต์ใด ๆ (เช่น lua / gamemonkey เป็นต้น)
Simon

ส่วนใหญ่เกิดจากการขาดประสบการณ์และเนื่องจากสมมติฐาน (อาจไม่ปลอดภัย) ว่าสิ่งนี้จะส่งผลเสียต่อประสิทธิภาพได้อย่างไร นอกจากนี้ฉันต้องการทำให้โลกเรียบง่ายเท่าที่จะทำได้ อย่างไรก็ตามฉันเปิดให้ใช้สคริปต์ได้
jmp97

1
ฉันเห็นด้วยโดยไม่มีการสนับสนุนการเขียนสคริปต์มันจะเพิ่มความหลากหลายให้กับเควสต์โดยไม่เกี่ยวข้องกับโปรแกรมเมอร์เครื่องยนต์
drxzcl

1
ภาษาสคริปต์มักจะเร็วพอที่จะไม่เป็นปัญหา ฉันขอแนะนำอย่างยิ่งให้ใช้พวกเขา ที่กล่าวมาการเขียนสคริปต์ส่วนใหญ่ของ WoW นั้นขึ้นอยู่กับการเรียกคาถาและเหตุการณ์ต่างๆ "Talk to A" จะอยู่เบื้องหลังทำให้ A เป็น "เสกคาถา" ให้กับผู้เล่นและการสืบเสาะจะต้องเขียนรหัส "สิ่งนี้จะสำเร็จเมื่อสะกด # 55728 ถูกโยนลงบนโปรแกรมเล่น" จากนั้นคุณเพียงแค่ต้องใช้รหัส AI เล็กน้อยในการสร้างสิ่งมีชีวิตเพื่อร่ายคาถาให้กับผู้เล่นและคุณก็พร้อมแล้ว
ZorbaTHut

1
ภาษาสคริปต์สมัยใหม่ (เช่น Lua Vm) อาจเร็วพอสำหรับคุณ พวกมันใช้งานง่ายและใช้งานง่ายคุณสามารถโหลดสคริปต์ในรันไทม์อีกครั้งคุณสามารถดีบักและทำขั้นตอนสคริปต์ในรันไทม์ ฉันขอแนะนำอย่างยิ่งให้มองไปที่เอ็นจิ้นการเขียนสคริปต์ (ตัวอย่าง: lua และ gamemonkey) เพื่อทำเควสสคริปต์
Simon

คำตอบ:


6

ก่อนคำเตือนแล้วคำแนะนำบางอย่าง

ครั้งล่าสุดที่ฉันต้องใช้ระบบเช่นนี้ฉันไม่ได้ใช้เอนจิ้นสำหรับแอพพลิเคชั่นที่เหมือน MMO ระบบเควสที่ส่งมาพร้อมนั้นเหมาะสำหรับผู้เล่นเดี่ยวที่พยายามและไม่สามารถใช้งานได้

ในที่สุดฉันก็ต้องเขียนสคริปต์เกี่ยวกับวัตถุทั้งหมดที่เกี่ยวข้องกับเควสด้วยมือไม่มากก็น้อยเช่นนี้ (pseudocode):

Lever004_on_activate() {
    if isOnQuest(player, QUEST_0012) do_something();
    if isOnQuest(player, QUEST_0015) do_something_else();
}

นี่คือฝันร้ายที่สมบูรณ์ ไม่มีวิธีที่จะคิดออกว่าเควสต์ทำงานอย่างไรโดยไม่ต้องไล่ให้หมดไปตลอดเกม อย่าทำอย่างนี้.

ฉันขอแนะนำให้สร้างระบบที่เควสต์ทั้งหมด (บรรทัด) แสดงเป็นเครื่องสถานะ จำกัด โดยมีกิจกรรมเพื่อตรวจสอบการเปลี่ยนผ่านและสคริปต์เพื่อตอบสนองต่อการเปลี่ยนแปลงดังกล่าว นั่นทำให้ง่ายต่อการติดตามว่าคุณอยู่ที่ไหนในเควสท์ที่กำหนด (บรรทัด) และทำให้เควสต์ทั้งหมดถูกห่อหุ้มอย่างประณีต

หากคุณต้องการคุณสามารถสร้างคลังสคริปต์ / เทมเพลตสคริปต์ในโปรแกรมแก้ไขโลกของคุณสำหรับเหตุการณ์ทั่วไป (ผู้เล่นพูดคุยกับ NPC ผู้เล่นฆ่าม็อบ ฯลฯ )

ฉันจะไม่กังวลมากเกินไปเกี่ยวกับประสิทธิภาพของสคริปต์ตราบใดที่คุณไม่ได้เรียกสคริปต์เหตุการณ์ของคุณบ่อยเกินไป ตามกฎของหัวแม่มือสคริปต์ควรยิงอย่างน้อยลำดับความสำคัญน้อยกว่าตรรกะของเกม "หลัก" (ภาพเคลื่อนไหวฟิสิกส์เป็นต้น) พวกเขาควรตอบสนองต่อเหตุการณ์แทนการยิงเป็นระยะเพื่อตรวจสอบว่ามีการปฏิบัติตามเงื่อนไขหรือไม่


3
ได้รับการเตือนว่า statemachines มีแนวโน้มที่จะได้รับอย่างรวดเร็วมากหากคุณต้องการเส้นทางการแสวงหาที่จะได้รับอิทธิพลจากปัจจัยภายนอกหรือถ้าเควสของคุณค่อนข้างซับซ้อน เควสต์เควสต์หลายตัว (ถ้ามีหลายเควสสามารถใช้งานได้) อาจเป็นฝันร้าย อย่างไรก็ตามในสาระสำคัญทุกโปรแกรมเป็น statemachine จึงสามารถทำได้ แต่ปัญหาที่ซับซ้อนยังคงซับซ้อนไม่ว่าคุณจะแค็ปซูลอย่างไร ตัวอย่างที่ดี (imo) คือการลืมเลือนที่ mods บางตัวหยุด mods อื่นไม่ให้ทำงาน - pre และ postconditions ของคุณสำหรับ state จะต้องเป็น solid ค่อนข้างหรือยอมรับได้อย่างผิดพลาด
Kaj

ใช่แล้ว kaj ถูกต้อง เพียงตรงไปที่ฟอรั่มของ WoW ในขณะนี้และอ่านเกี่ยวกับผู้คนที่บ่นเกี่ยวกับเควสที่ไม่สามารถทำลายได้ มันเกิดขึ้นตลอดเวลาแม้แต่ในเมเจอร์ลีก มันยากมากที่จะทำทุกอย่างให้ถูกต้อง
drxzcl

3

โดยทั่วไประบบของเราเกี่ยวข้องกับการเรียกใช้นิพจน์ (ภาษาสคริปต์ขนาดเล็กที่กำหนดเอง แต่ tcl / lua / python จะทำงานได้ดีเช่นกันหรือทำบางสิ่งบางอย่างด้วยตัวเอง) แต่ละเฟรมเซิร์ฟเวอร์สำหรับแต่ละขั้นตอนภารกิจ นี่คือ "ภารกิจส่วนตัว" ที่เชื่อมโยงกับผู้เล่นเฉพาะ แต่ละขั้นตอนย่อยนั้นเป็นส่วนหนึ่งของ FSM (กลไกสถานะอัน จำกัด ) สำหรับภารกิจเอง (ซึ่งอาจเป็นเพียงขั้นตอนย่อยของภารกิจอื่น) นอกจากนี้ยังมี "ภารกิจแผนที่" ซึ่งมี FSM เดียวและเชื่อมโยงกับแผนที่แทนที่จะเป็นผู้เล่น (คิดว่าเควสสาธารณะของ WAR) แต่ขั้นตอนย่อยทำงานเหมือนเดิม

สิ่งที่นิพจน์เหล่านี้ดูจริง ๆ คือเหตุการณ์ที่ออกอากาศโดยระบบเช่น "NPC เสียชีวิต" หรือ "เสร็จสิ้นการโต้ตอบ" นี่หมายความว่าคุณสามารถแยกส่วนต่าง ๆ ออกได้ส่วนระบบการเล่นเกมก็แค่ส่งกิจกรรมตามต้องการซึ่งสคริปต์ภารกิจเพียงแค่ฟังเหตุการณ์และไม่ต้องกังวลว่าจะมาจากที่ใด หากคุณต้องการที่จะให้ภารกิจ FSMs โต้ตอบกับสถานะโลก (แสดงเฉพาะผู้ติดต่อนี้เมื่ออยู่ในสถานะภารกิจ X) คุณจะได้รับพลังมากมายจากระบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.