freemancer   04-21-2014, 10:26 PM
#1
RM XP (เปลี่ยนโปรแกรมเล่นแล้วจากRMVX )
อยากให้เหตุการ์ณคือทหารฝ่ายเรา (ไม่ใช่ตัวฮีโร่ ฮีโร่ทำหน้าที่ชี้นิ้วสั่ง)
เดินไปเจอทหารฝ่ายศัตรู หรือทหารฝ่ายศัตรูเดินมาชนทหารฝ่ายเรา แล้วเกิดทริกเหตุการณ์โจมตีใส่กัน ต้องทำยังไงหรือครับ ตอนนี้พอมันชนกันก็ไม่รู้จะให้มันเช็คการชนกันยังไง น่ะครับ

เอาแบบคิดค่าบาดเจ็บให้ตายไปข้าง วัดพลังโจมตีกับเลือด น่ะครับ
ขอบคุณคับDerp
This post was last modified: 04-21-2014, 10:33 PM by freemancer.
Jirayu   04-21-2014, 10:32 PM
#2
จำได้คร่าวๆ ว่ามันเช็คตำแหน่งของเหตุการณ์ได้ครับ event ตัวแปร มันจะมีให้เก็บค่าพิกัดของเหตุการณ์ แล้วค่อยเอามาคำนวน

[Image: 76561198011764062.png]

[Image: graphic.png]
Mysticphoenix   04-21-2014, 11:03 PM
#3
ยากหน่อยนะ

[Image: webboard%20signature1_zpskhtut2jg.png]
การทำอาหารที่อร่อยที่สุด และเดือดร้อนชาวบ้านมากที่สุด กำลังจะเริ่มขึ้น
jojo741963   04-21-2014, 11:49 PM
#4
แนะนำสคริปต์ตัวหนึ่งก่อนครับ
http://littledrago.blogspot.com/2012/01/...ables.html
เป็นสคริปต์ที่กำหนดตัวแปรได้อิสระ เหมาะจะไว้กำหนดเลือดครับ

ถ้าใช้คำสั่งเหตุการณ์อาจจะยากครับ แนะนำว่าอาจจะต้องสร้าง alias update ใน Game_Map
เลยน่าจะสะดวกกว่าครับ

Code:
class Game_Map
alias war_update update
  def update
    war_update
    -- คำสั่ง --

  end
end

ลองแกะโค้ดมาจาก Enemy Detection System ดูครับ พอจะบอกได้คร่าวๆ

Code:
for soldier in @events.values #สมมติให้ soldierคืออีเว้นจากอีเว้นทั้งหมด
if !soldier.name.include?("soldier") #อีเว้นไหนไม่มีชื่อว่า soldier
  next #ให้ข้ามไป อย่าไปสนใจมัน
else #จากนั้นก็มาพิจรณาอีเว้นต่อ
  if soldier.character_name != "" #ถ้าอีเว้นนั้น รูปตัวละครจะต้องไม่ว่างเปล่า
   #พักมาเช็คฝ่ายศัตรูกันบ้าง
   for enemy in @events.values #สมมุติให้ enemy คืออีเว้นจากอีเว้นทั้งหมด
    if enemy.name.include?("enemy") && enemy.character_name != ""#อีเว้นไหนบ้างที่ชื่อว่า enemy และรูปตัวละครจะต้องไม่ว่างเปล่า
     #หลังจากได้ ทหารฝ่ายเราและศัตรูมาแล้วก็มาคำนวณกัน
     range = (soldier.x - enemy.x).abs + (soldier.y - enemy.y).abs #บรรทัดนี้ผมยังไม่เข้าใจครับ รู้แค่ว่าหาระยะ
     if range <= 1 #ถ้าระยะน้อยกว่าหรือเท่ากับหนึ่ง แปลว่าอีเว้นทั้งสองอยู่ในระยะประชิดแล้วครับ
     #เพื่อความสมจริง อาจจะต้องเช็คการหันหน้าเพิ่ม ว่าหันหน้าเข้าไปหาศัตรูรึเปล่า
     #เช็คฝ่ายทหารโจมตี
     if (soldier.direction == 2 && enemy.y == soldier.y + 1 ) or
      (soldier.direction == 4 && enemy.x == soldier.x - 1 ) or
      (soldier.direction == 6 && enemy.x == soldier.x + 1 ) or
      (soldier.direction == 8 && enemy.y == soldier.y - 1 )
      #บรรทัดนี้เป็นการ สร้างความเสียหายให้ศัตรูครับ จากสคริปต์ข้างต้น
      $game_variables[[@map_id,enemy.id,"A"]] += 1
      enemy.animation_id = 7 #สร้างภาพเคลื่อนไหวใส่เหตุการณ์
     end
     #เช็คฝ่ายศัตรูโจมตี
     if (enemy.direction == 2 && soldier.y == enemy.y + 1 ) or
      (enemy.direction == 4 && soldier.x == enemy.x - 1 ) or
      (enemy.direction == 6 && soldier.x == enemy.x + 1 ) or
      (enemy.direction == 8 && soldier.y == enemy.y - 1 )
      #บรรทัดนี้เป็นการ สร้างความเสียหายให้ทหารเราครับ จากสคริปต์ข้างต้น
      $game_variables[[@map_id,soldier.id,"A"]] += 1
      soldier.animation_id = 7 #สร้างภาพเคลื่อนไหวใส่เหตุการณ์
     end    
    end
   else
    next #อีเว้นไหนที่ไม่ใช่ศัตรูก็ข้ามไป
   end
  end
end
end
end
มี end เกินรึเปล่าไม่ค่อยแน่ใจแล้วแฮะ ตาลาย
ยังไม่แน่ใจด้วยว่ามีบัครึเปล่า แต่ระบบเกมปืนฉีดน้ำของผมก็ระบบประมาณนี้ครับ

เมื่อเราจะเช็คเลือดของศัตรู เมื่อกี้คำสั่งเพิ่มความเสียหายให้ศัตรูถูกกำหนดด้วย
$game_variables[[ไอดีแมพ,อีเว้นไอดี,"A"]]
เช็คโดยสร้างเหตุการณ์ทหารหรือศัตรูตั้งเป็นพร้อมเนืิ้อเรื่อง ตรวจเช็คเงื่อนไขด้วยสคริปตว่า
$game_variables[[@map_id,@event_id,"A"]] >= จำนวนเลือดของอีเว้นนั้น
เพราะเราได้บวกตัวแปรเหล่านี้ไปแล้ว เมื่อเข้าประชิดกัน ถ้าความเสียหายถึงที่กำหนด อีเว้นนั้นก็ตายครับ อาจจะลบเหตุการณ์ทิ้ง หรือเปลี่ยนภาพตัวละครเป็นภาพตอนตาย แต่ต้องแก้สคริปต์ที่เช็คด้วยนะครับ เพราะใส่เป็น character_name != "" อยู่ เปลี่ยนให้เหมือนกันด้วย หรือให่สวิตช์เฉพาะเปิดแล้วสร้างเหตุการณ์ของตอนที่ตายก็ได้ครับ

ปล.เหนื่อย+สคริปต์ดูแปลกๆ บ้างเพราะก็อบEnemy Detection System มา แล้วเปลี่ยนชื่อ
ผู้รู้ท่านอื่นถ้ามาช่วยแปลง ตรวจบัค+ลงวิธีแก้ จะดีมากครับ /chan

.
[Image: bzkfm.gif] เวลาที่เล่นเกม ต้องเปิดไฟให้สว่าง และนั่งให้ไกลจากจอพอประมาณด้วย นะ[Image: bzkfm.gif]
.
hengmana   04-22-2014, 12:34 AM
#5
ถ้าเป็น NPC หรือเหตุการณ์ ตัวเช็คตำแหน่งนั้นก็
$game_map.events[@event_id].x
$game_map.events[@event_id].y
freemancer   04-22-2014, 08:42 AM
#6
ขอบคุณมากครับ ของผมจะลองไปปรับใช้ดูนะครับ

ถ้าใช้อีเวนท์ก้ต้องเช็กตัวแปรพิกัดx y สองตัวแปรต่อ1event. แล้วสร้างอีเวนท์เปล่าๆ สำหรับเช็คระยะมาวาวหน้าอีเวนตัวนี้
อีเวนทศัตรูก้มีเช็คเก็บค่าตัวแปรxyเหมือนกัน กับมีสร้างอีเวนท์เช็คระยะหน้าอีเวนทตัวศัตรู แล้วให้้ทั้งสองตัวททำเหมือนกันคือ
ถ้าพิกัดxyของตัวเอง เท่ากับxyของอีเวนนท์เช็คระยะฝั่งตรงข้ามเมื่อไหร่ให้เกิดอนิเมชั่นถูกฟันและบาดเจ็บ ตามค่าดาเมจของฝั่งตรงข้ามที่ตั้งไว้ในตัวแปรใดๆแล้วแต่กำหนด ส่วนท่่าฟันก็ให้เปลี่นรรูปคนฟันแล้วแต่กำหนด
สรุปทหาร1ตัวมี
ตัวแปรพิกัดx
ตัวแปรพิกัดy
อีเวนท์ตตรวจจับเช็คระยะ
มีตัวแปรพิกัดx ให้คอยติดตามพิกกัดxของอีเวนทตัวบนโดระบุตำแหน่วบวกค่าตัวแปรหรือลบตัวแปรเต
มีตัวแปรพิกัดy
ตัวแปรดาเมจ กับตัวแปรเลือดและอื่นๆทีี่ใช้ต่อสู้
คร่าวๆประมาณนี้
ขอบคุณครับ
This post was last modified: 04-22-2014, 08:58 AM by freemancer.
Mysticphoenix   04-22-2014, 09:23 AM
#7
ลองใช้สคริปที่ผมเอามาโพสเมื่อวานสิ
http://irpg.in.th/thread-1798.html

แล้วใส่comment ว่า
-----------------------------
Code:
Custom Trigger
(($game_map.events[-1].direction == 2 && $game_map.events[6].y == $game_map.events[-1].y + 1 ) ||
      ($game_map.events[-1].direction == 4 && $game_map.events[6].x == $game_map.events[-1].x - 1 ) ||
      ($game_map.events[-1].direction == 6 && $game_map.events[6].x == $game_map.events[-1].x + 1 ) ||
      ($game_map.events[-1].direction == 8 && $game_map.events[6].y == $game_map.events[-1].y - 1 )) ||
(($game_map.events[-1].direction == 2 && $game_map.events[7].y == $game_map.events[-1].y + 1 ) ||
      ($game_map.events[-1].direction == 4 && $game_map.events[7].x == $game_map.events[-1].x - 1 ) ||
      ($game_map.events[-1].direction == 6 && $game_map.events[7].x == $game_map.events[-1].x + 1 ) ||
      ($game_map.events[-1].direction == 8 && $game_map.events[7].y == $game_map.events[-1].y - 1 ))||
(($game_map.events[-1].direction == 2 && $game_map.events[8].y == $game_map.events[-1].y + 1 ) ||
      ($game_map.events[-1].direction == 4 && $game_map.events[8].x == $game_map.events[-1].x - 1 ) ||
      ($game_map.events[-1].direction == 6 && $game_map.events[8].x == $game_map.events[-1].x + 1 ) ||
      ($game_map.events[-1].direction == 8 && $game_map.events[8].y == $game_map.events[-1].y - 1 ))
-----------------------------

คำสั่งดังกล่าวจะทำให้eventทำงานเมื่อ event นี้ อยุ่ติดกับ event เบอร์ 6 7 8

เนื่องจากโค้ดยาวมาก สามารถใช้กล่อง comment หลายอันต่อกันได้

ผมยังไม่ได้ลองนะคับ เพราะตอนนี้อยู่ที่ทำงาน เอิ้กๆ ผิดถูกขออภัย

ปล. $game_map.events[-1] คือตัวมันเอง

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

ปล. เนื่องจากมันจะเช็คตลอด ทำให้อาจเกิดการ trigger รัวๆ ดังนั้นอย่าลืมทำกลไก delay ไว้ด้วย จะได้ไม่ trigger รัวๆ

ปล. แบบคุณ jojo ก็ clean ดีนะ ผมสนับสนุนแบบคุณ jojo ถ้าทำได้ก็ทำเลย
This post was last modified: 04-22-2014, 09:31 AM by Mysticphoenix.

[Image: webboard%20signature1_zpskhtut2jg.png]
การทำอาหารที่อร่อยที่สุด และเดือดร้อนชาวบ้านมากที่สุด กำลังจะเริ่มขึ้น
freemancer   04-22-2014, 10:15 AM
#8
ขอบคุณครับ ปัญหาคือผมไม่เป็นงานสคริปน่ะครับ แต่ถนัดeventมากกว่า แต่จะเอาแนวคิดไปปรับใช้กับพยายามยุบให้สั้นเท่าที่ทำได้น่ะครับ
แต่ถ้าก็อปไปวางผมก้รุ้สึกไม่เข้าใจระบบตัวเอง อาจจะทำงานขั้นตอนต่อไปยากน่ะครับ แต่ขอบคุณนะครับ
This post was last modified: 04-22-2014, 10:16 AM by freemancer.
  
Users browsing this thread: 1 Guest(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.