Raccoon Game RPG รวมพลนักพัฒนา

[สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

Go down

[สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Thu Oct 13, 2011 10:21 am

ระบบ ฉากต่อสูแบบด้านข้าง หรือ
Sideviewbattleมันก็คือระบบต่อสู้แบบไฟนอลนั่นแหล่ะ
แต่จะมีการเคลื่อนที่เขาไปหาโจมตีศัตรูระยะประชิดได้ด้วยและจะแตกต่างจาก
ระบบปกติ(frontview
(ระบบต่อสู้ด้านหน้า))ตรงที่จะได้โจมตีตามความเร็วฮีโร่แทนที่จะเป็บแบบ
เทิร์นเบส(ผลัดกันโจมตี)ถ้าฮีโร่คนไหนมีความเร็วมากๆก็จะได้โจมตีบ่อยกว่าคน
ที่มีความเร็วน้อยๆ(แต่จริงๆระบบต่อสู้ด้านหน้าก็ใช้ RTAB ได้เหมือนกัน)

สคริปตัวนี้เป็นสคริปของ minkoff ผมจะมาแนะนำการใช้ให้ฟัง(อ่าน)รูป ต.ย. ระบบ Sideview

สคริปที่ใช้
ซ่อน

หลังจากคลายซิปก็ก็อปไปเรียงตามรูป


1.สคริป RTAB หรือ สคริประบบต่อสู้แบบเรียลไทม์ เป็นระบบซูมเข้าซูมออกคล้ายๆแบบที่ท่านบุ๊กลงนั้นแหล่ะ เป็นตัวหลักในการทำระบบเรียลไทม์
2.RTAB/CTB Changes หรือ สคริประบบซูมหน้าจอให้เป็นหน้าจอปกติ(มั้ง)
3-7 ส่วนเซต รูป Battlers ตำแหน่ง และระบบต่างๆ
3.Configuration เป็นส่วนเซตค่า Battlers ในรูปแบบต่างๆโดยหลักๆแล้วจะมาเซตที่สคริปนี้
4.Sprite_System เป็นส่วนเกี่ยวกับการตั้งค่า Battlers เราไม่ต้องไปยุ่ง
5.Battle_System เป็นส่วนเกี่ยวกับการต่อสู้ การโจมตีหรือใช้ทักษะ การเคลื่อนที่ต่างๆ เราไม่ต้องไปยุ่ง
6.Misc_Code-7.RTAB_Patch
เป็นส่วนเสริมอื่นซึ่ง เราไม่ต้องไปยุ่ง

สามารถเซต การแบ่งรูป Battlers ได้ที่ Configuration
และถ้ามีความเชี่ยวชาญมากขึ้นอาจไปปรับแต่งส่วนต่างๆเพิ่มเติมเอาเองก็ได้

สามารถหาสคริปอื่นมาเสริมได้ที่
http://members.jcom.home.ne.jp/cogwheel/

ลิงค์ ต.ย. ระบบ RTAB
http://www.creationasylum.net/index.php?showtopic=11827
(แนะนำให้โหลด RTAB with Extras)

Battlers หาได้จากที่นี่
คลิก

สคริปตัวนี้เป็นตัวที่ผมดัดแปลงมาจากต้นฉบับคือจะมีการใช้ท่าทางต่างๆมากขึ้น เช่น
-เมื่อมีดาเมจเป็น 0 จะแสดงท่าป้องกันด้วย
-มีการแลนดอมท่าโจมตีเป็น 2 แบบ(ปกติแบบเดียว)
-มีการหารค่าประสบการณ์ออกตามจำนวนฮีโร่
-เมื่อ เลเวลอัพ จะเพิ่ม HP/SP เต็ม(9999)
-เมื่อจบการต่อสู้จะหยุดเพลงทันที

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

จะอยู่ตรงกลางล่างสุดของรูป ดังรูป อยากให้ศัตรูอยู่ตำแหน่งไหนก็วางให้ดีเท่านั้นเอง (ถ้ารูปแบทเทิ้ลใหญ่อาจวางลำบากนิด)

ลงแล้วมองไม่เห็นฟอนท์

ไปดูที่ (รอแก้ไข)
ข้อ 5

เออเรอร์อันนี้เกิดจากอะไร

อาการนี้เกิดจากไม่มีรูปไอคอนอาการต่างๆนะ
แก้โดยการเอารูปไอคอน(ที่เอาเอาอาการ)มาใส่ในโฟลเดอร์ Icons
โดยตั้งชื่อไปคอนว่า "อาการ-" + ชื่ออาการ เช่น อาการ-พิษ

จะทำให้ตัวละครยิง ธนูหรือปืน(ไม่เคลื่อนที่เวลาโจมตี) ทำอย่างไร
ไปที่สคริป Configuration
หาบรรทัดที่เขียนว่า
Code:
MNK_STATIONARY_WEAPONS = [] #
(IDอาวุธประเภทธนูและปืน  ที่ไม่มีการเคลื่อนที่)
ประมาณบรรทัดที่ 265 กว่าๆ

ใส่ ID อาวุธที่ไม่มีการเคลื่อนที่(พวกปืน ธนู) ลงไปใน [] เช่น [17,18,19,20,21,22,23,24]
ตัวอย่างการลงสคริป+การเซต Battles

mediafire.com ?mmewxq1iyjm

อันนี้เอาอาการเป็นรูปไอคอนออกนะ
เเถม สคริปต์ Minkoff ตัวเก่่า
http://legacy-studios.org/forums/index.php?/topic/293-minkoffs-animated-battlers-enhanced/

Credit : Minkoff
Modified : Shinryu


แก้ไขล่าสุดโดย boyhit เมื่อ Tue Nov 15, 2011 10:38 am, ทั้งหมด 1 ครั้ง




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

Re: [สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Thu Oct 27, 2011 1:38 am

ระบบสคริปเสริมที่ใช้กับ ระบบนี้

สคริป Connected Attacking (สคริปโจมตีต่อเนื่อง)


สคริป
ซ่อน


โดยวางสคริปนี้ตามภาพ

ต้องวางไว้ใต้ RTAB และ RTAB/CTB Changes แล้วเหนือส่วนเซต Battle สคริปนี้ถึงจะทำงาน

วิธีใช้งาน
ตรงไหนอยากให้ดาเมจเด้งออกมาก็ให้เซตว่า

มีจุดเซต 3 จุดคือ
เฟรมที่-เป็นการเซตว่าตัวเลขจะเด้งตอนเฟรมไหน(ควรตั้งเผื่อไว้สักเฟรมหนึ่ง)
แดง-ความแรงเป็น%ของความแรงสูงสุด และรวมทุกอันแล้วต้องไม่เกิน 100
และเซตสีเขียวเป็น 100 และสีน้ำเงินเป็น 0 สคริปนี้ถึงจะเริ่มทำงาน
เช่นตั้งไว้ 40 แล้วท่าแรง 1000 เลขที่ออกก็คือประมาณ 400

ตัวอย่าง
ท่า Cross Cut มีการกระพริบเฟรมที่ 3 และ 6 ก็ไปเซตดังภาพ ดาเมจจะเด้งตอนเฟรมที่ 2 และ 5

หรือ Leg Sweep ถ้าเซตตามภาพคือที่เฟรม 3 เซตความแรง 20 5ครั้ง ดาเมจจะเด้งตอนเฟรมที่ 3 5ครั้งรวด


ปล.ความแรงจะมีกี่อันก็ได้ โดยใส่ได้ตั้งแต่ 1-100 แต่เมื่อรวมทุกอันแล้วต้องไม่เกิน 100 นะ
ปล2.สคริปตัวนี้เป็นตัวอัพเดทจากตัวใน thaiware ในนั้นใส่ได้ 1-20 แต่นี่ใส่ได้ 1-100 (พูดง่ายๆคือโจมตีได้มากสุด 100 hit)




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

Re: [สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Thu Oct 27, 2011 1:41 am

Skill Casting Time Counter (ระบบหน่วงเวลาการใช้สกิล)

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

สคริป
หาได้จากตัวอย่างในเรปแรก

วิธีการใช้
ก็อป
Code:
when ""
battler.rtp = 0
มาวางต่อจากอันเก่าหรือลบอันเก่าทิ้งไปเลยก็ได้
ใน "" คือชื่อทักษะที่ต้องการให้มีการหน่วงเวลา
ส่วนเลขตรงคือความเร็วในการเต็มของหลอดเช่น 20 ก็คือเต็มเร็วกว่าแถบปกติ 5 เท่า 100 คือ 1 เท่า
กรณีที่ต้องการใช้ความเร็วเท่ากันก็สามารถใส่ดังนี้ได้เลย
Code:
when "เคียรี่","เคียริค","สโตน่า"
จะเท่ากับว่าทักษะ "เคียรี่","เคียริค","สโตน่า" จะใช้แถบเวลาเท่ากัน

------------------------------------------------------------------------------------------------------------------------------------------------------------------

Cooperative Skills (ระบบโจมตีประสาน)
เมื่อมีการใช้ทักษะที่กำหนด แถบจะเปลื่ยนเป็นสีน้ำตาลทั้งคู่

และเมื่อแถบเต็มจะเป็นการใช้ทักษะพร้อมกัน


สคริป
หาได้จากตัวอย่างในเรปแรก

วิธีการใช้
ประมาณบรรทัดที่ 29 ตรง
Code:
synthe_s.push(["ชื่อมนต์","ชื่อมนต์"],"ชื่อเวทย์ผสม"])
คือในวงเล็บแรกคือชื่อทักษะที่ต้องการใช้ 2 คน เมื่อมีคนทักษะ ชื่อมนต์ 2 คนปุ๊บ จะเป็นการใช้ทักษะที่อยู่ด้านหลังทันที

จากนั้นไปตรงส่วน case magic
Code:
when "ชื่อเวทย์ผสม"
spells = ["ชื่อมนต์1","ชื่อมนต์1"]
success = spell_effect(battler, synthe_b, spells)
ก็ปรับให้ตรงกับด้านบนเป็นอันเสร็จพิธี

ถ้าต้องการให้เป็นท่าประสาน 3 คนที่เกิดจากมาน๖ 3 ชนิดก็ใส่ว่า
Code:
synthe_s.push(["ชื่อมนต์1","ชื่อมนต์2","ชื่อมนต์3"],"ชื่อเวทย์ผสม"])
กับ
Code:
when "ชื่อเวทย์ผสม"
spells = ["ชื่อมนต์1","ชื่อมนต์2","ชื่อมนต์3"]
success = spell_effect(battler, synthe_b, spells)
ปล.ชื่อจะเป็นอะไรก็ได้แต่ขอให้มีในฐานข้อมูล
ปล2.Cooperative Skills ต้องใช้คู่กับสคริป Skill Casting Time Counter เพราะถ้าไม่มีการหน่วงเวลา จะเป็นการใช้ทักษะไปเลย




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

Re: [สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Thu Oct 27, 2011 1:42 am

สคริปแถบ HP/SP/EXP
1.แบบที่ผมใช้อยู่ของcogwheel
Code:
# HP/SP/EXP Gauge Script v1.00
# Distribution original support URL
# http://members.jcom.home.ne.jp/cogwheel/

#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
  def now_exp
    return @exp - @exp_list[@level]
  end
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Draw HP Gauge
  #--------------------------------------------------------------------------
  # Modification of the original Draw HP process
  alias :draw_actor_hp_hpsp :draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    # Determine the rate of fill based on the actor's HP and HP Max
    if actor.maxhp != 0
      rate = actor.hp.to_f / actor.maxhp
    else
      rate = 0
    end
    # plus_x:    revised x-coordinate
    # rate_x:    revised X-coordinate as (%)
    # plus_y:    revised y-coordinate
    # plus_width: revised width
    # rate_width: revised width as (%)
    # height:    Vertical width
    # align1: Type 1 ( 0: left justify  1: center justify 2: right justify )
    # align2: Type 2 ( 0: Upper stuffing 1: Central arranging  2:Lower stuffing )
    # align3: Gauge type 0:Left justify 1: Right justify
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # Gradation settings:  grade1: Empty gauge  grade2:Actual gauge
    # (0:On side gradation  1:Vertically gradation    2: Slantedly gradation)
    grade1 = 1
    grade2 = 0
    # Color setting. color1: Outermost framework, color2: Medium framework
    # color3: Empty framework dark color, color4: Empty framework light/write color
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(64, 0, 0, 192)
    # Color setting of gauge
    # Usually color setting of the time   
    color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
    color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
    # Determine the gauge's width & fill based on the actor's HP
    if actor.maxhp != 0
      hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
    else
      hp = 0
    end
    # Drawing of gauge
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, hp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # Call the original Draw HP process
    draw_actor_hp_hpsp(actor, x, y, width)
  end
  #--------------------------------------------------------------------------
  # * Draw SP Gauge
  #--------------------------------------------------------------------------
  # Modification of the original Draw SP process
  alias :draw_actor_sp_hpsp :draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    # Determine the rate of fill based on the actor's SP and SP Max
    if actor.maxsp != 0
      rate = actor.sp.to_f / actor.maxsp
    else
      rate = 1
    end
    # plus_x:    revised x-coordinate
    # rate_x:    revised X-coordinate as (%)
    # plus_y:    revised y-coordinate
    # plus_width: revised width
    # rate_width: revised width as (%)
    # height:    Vertical width
    # align1: Type 1 ( 0: left justify  1: center justify 2: right justify )
    # align2: Type 2 ( 0: Upper stuffing 1: Central arranging  2:Lower stuffing )
    # align3: Gauge type 0:Left justify 1: Right justify
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # Gradation settings:  grade1: Empty gauge  grade2:Actual gauge
    # (0:On side gradation  1:Vertically gradation    2: Slantedly gradation)
    grade1 = 1
    grade2 = 0
    # Color setting. color1: Outermost framework, color2: Medium framework
    # color3: Empty framework dark color, color4: Empty framework light/write color
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(0, 64, 0, 192)
    # Color setting of gauge
    # Usually color setting of the time     
    color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
    color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
    # Determine the gauge's width & fill based on the actor's SP
    if actor.maxsp != 0
      sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
    else
      sp = (width + plus_width) * rate_width / 100
    end
    # Drawing of gauge
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, sp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # Call the original Draw HP process
    draw_actor_sp_hpsp(actor, x, y, width)
  end
  #--------------------------------------------------------------------------
  # * Draw EXP Gauge
  #--------------------------------------------------------------------------
  # Modification of the original Draw HP process
  alias :draw_actor_exp_hpsp :draw_actor_exp
  def draw_actor_exp(actor, x, y, width = 204)
    # Determine the rate of fill based on the actor's EXP and Next EXP
    if actor.next_exp != 0
      rate = actor.now_exp.to_f / actor.next_exp
    else
      rate = 1
    end
    # plus_x:    revised x-coordinate
    # rate_x:    revised X-coordinate as (%)
    # plus_y:    revised y-coordinate
    # plus_width: revised width
    # rate_width: revised width as (%)
    # height:    Vertical width
    # align1: Type 1 ( 0: left justify  1: center justify 2: right justify )
    # align2: Type 2 ( 0: Upper stuffing 1: Central arranging  2:Lower stuffing )
    # align3: Gauge type 0:Left justify 1: Right justify
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # Gradation settings:  grade1: Empty gauge  grade2:Actual gauge
    # (0:On side gradation  1:Vertically gradation    2: Slantedly gradation)
    grade1 = 1
    grade2 = 0
    # Color setting. color1: Outermost framework, color2: Medium framework
    # color3: Empty framework dark color, color4: Empty framework light/write color
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(64, 0, 0, 192)
    # Color setting of gauge
    # Usually color setting of the time     
    color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
    color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
    # Determine the gauge's width & fill based on the actor's Next EXP
    if actor.next_exp != 0
      exp = (width + plus_width) * actor.now_exp * rate_width /
                                                          100 / actor.next_exp
    else
      exp = (width + plus_width) * rate_width / 100
    end
    # Drawing of gauge
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, exp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # Call the original Draw EXP process
    draw_actor_exp_hpsp(actor, x, y)
  end
  #--------------------------------------------------------------------------
  # * Drawing of gauge
  #--------------------------------------------------------------------------
  def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    case align1
    when 1
      x += (rect_width - width) / 2
    when 2
      x += rect_width - width
    end
    case align2
    when 1
      y -= height / 2
    when 2
      y -= height
    end
    # Framework Drawing
    self.contents.fill_rect(x, y, width, height, color1)
    self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
    if align3 == 0
      if grade1 == 2
        grade1 = 3
      end
      if grade2 == 2
        grade2 = 3
      end
    end
    if (align3 == 1 and grade1 == 0) or grade1 > 0
      color = color3
      color3 = color4
      color4 = color
    end
    if (align3 == 1 and grade2 == 0) or grade2 > 0
      color = color5
      color5 = color6
      color6 = color
    end
    # Drawing of empty gauge
    self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
                                  color3, color4, grade1)
    if align3 == 1
      x += width - gauge
    end
    #  Drawing of actual gauge
    self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
                                  color5, color6, grade2)
  end
end

#------------------------------------------------------------------------------
# New routine added to the Bitmap class.
#==============================================================================

class Bitmap
#--------------------------------------------------------------------------
# * Rectangle Gradation Indicator
#  color1: Start color
#  color2: Ending color
#  align: 0: On side gradation
#          1: Vertically gradation
#          2: The gradation (intense concerning slantedly heavily note)
#--------------------------------------------------------------------------
  def gradation_rect(x, y, width, height, color1, color2, align = 0)
    if align == 0
      for i in x...x + width
        red  = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
        green = color1.green +
                (color2.green - color1.green) * (i - x) / (width - 1)
        blue  = color1.blue +
                (color2.blue - color1.blue) * (i - x) / (width - 1)
        alpha = color1.alpha +
                (color2.alpha - color1.alpha) * (i - x) / (width - 1)
        color = Color.new(red, green, blue, alpha)
        fill_rect(i, y, 1, height, color)
      end
    elsif align == 1
      for i in y...y + height
        red  = color1.red +
                (color2.red - color1.red) * (i - y) / (height - 1)
        green = color1.green +
                (color2.green - color1.green) * (i - y) / (height - 1)
        blue  = color1.blue +
                (color2.blue - color1.blue) * (i - y) / (height - 1)
        alpha = color1.alpha +
                (color2.alpha - color1.alpha) * (i - y) / (height - 1)
        color = Color.new(red, green, blue, alpha)
        fill_rect(x, i, width, 1, color)
      end
    elsif align == 2
      for i in x...x + width
        for j in y...y + height
          red  = color1.red + (color2.red - color1.red) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          green = color1.green + (color2.green - color1.green) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          blue  = color1.blue + (color2.blue - color1.blue) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          alpha = color1.alpha + (color2.alpha - color1.alpha) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          color = Color.new(red, green, blue, alpha)
          set_pixel(i, j, color)
        end
      end
    elsif align == 3
      for i in x...x + width
        for j in y...y + height
          red  = color1.red + (color2.red - color1.red) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          green = color1.green + (color2.green - color1.green) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          blue  = color1.blue + (color2.blue - color1.blue) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          alpha = color1.alpha + (color2.alpha - color1.alpha) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          color = Color.new(red, green, blue, alpha)
          set_pixel(i, j, color)
        end
      end
    end
  end
end

2.แบบที่ใช้ในเกม Tales of the Quest ของท่าน nongkong03
Code:
#===========================================================================
# *** HP/MP/ATB/LimitBreak bar Slanted Style Compatible with RTAB ***
# *** Version 2.1
#---------------------------------------------------------------------------
# by Clive
# based on Cogwheel's Bars and Sephiroth Spawn's Slanted Bars.
#---------------------------------------------------------------------------
# ----- GREAT THANKS to DerVVulfman for solving the lag problem
#------This is a plug and play script so it should work without any problem!
#=============================================================================

# If using with Limit Break, must paste BELOW the Limit Break script as it re-
# writes the 'Gauge drawing' system.  Will cause an error if not properly put.

# If used with Trickster's STEAL SCRIPT version 6 R1 (revision 1), then the
# height of RTAB's AT Bar (Draw Actor ATG) may not be smaller than 5 pixels
# due to a float-to-float error.  A height of 6 pixels is the smallest.


#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Get the current EXP
  #--------------------------------------------------------------------------
  def now_exp
    return @exp - @exp_list[@level]
  end
  #--------------------------------------------------------------------------
  # * Get the next level's EXP
  #--------------------------------------------------------------------------
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end


#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window 
 
  #==========================================================================
  # * Draw Slant Bar(by SephirothSpawn)
  #==========================================================================
  def draw_slant_bar(x, y, min, max, width = 152, height = 6,
      bar_color = Color.new(150, 0, 0, 255),
      end_color = Color.new(255, 255, 60, 255))
    # Draw Border
    for i in 0..height
      self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
    end
    # Draw Background
    for i in 1..(height - 1)
      r = 100 * (height - i) / height + 0 * i / height
      g = 100 * (height - i) / height + 0 * i / height
      b = 100 * (height - i) / height + 0 * i / height
      a = 255 * (height - i) / height + 255 * i / height
      self.contents.fill_rect(x + i, y + height - i, width, 1, Color.new(r, b, g, a))
    end
    # Draws Bar
    for i in 1..( (min.to_f / max.to_f) * width - 1)
      for j in 1..(height - 1)
        r = bar_color.red * (width - i) / width + end_color.red * i / width
        g = bar_color.green * (width - i) / width + end_color.green * i / width
        b = bar_color.blue * (width - i) / width + end_color.blue * i / width
        a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
        self.contents.fill_rect(x + i + j, y + height - j, 1, 1, Color.new(r, g, b, a))
      end
    end
  end
 
  #==========================================================================
  # * Draw HP
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    width : draw spot width
  #==========================================================================
  alias :draw_actor_hp_hpsp :draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144) 
    draw_slant_bar(x, y + 12, actor.hp, actor.maxhp, width, 6,
      bar_color = Color.new(150, 0, 0, 255),
      end_color = Color.new(255, 255, 60, 255))
    draw_actor_hp_hpsp(actor, x, y, width)
  end
  #==========================================================================
  # * Draw SP
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    width : draw spot width
  #==========================================================================
  alias :draw_actor_sp_hpsp :draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    draw_slant_bar(x, y + 12, actor.sp, actor.maxsp, width, 6,
      bar_color = Color.new(0, 0, 155, 255),
      end_color = Color.new(255, 255, 255, 255))
    draw_actor_sp_hpsp(actor, x, y, width)
  end
  #==========================================================================
  # * Draw EXP
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #==========================================================================
  alias raz_bars_base_exp draw_actor_exp 
  def draw_actor_exp(actor, x, y)
    if actor.level == 99
      draw_slant_bar(x, y + 18, 1, 1, 190, 6, bar_color = Color.new(0, 100, 0, 255), end_color = Color.new(0, 255, 0, 255))
    else
      draw_slant_bar(x, y + 18, actor.now_exp, actor.next_exp, 190, 6, bar_color = Color.new(0, 100, 0, 255), end_color = Color.new(255, 255, 255, 255))
    end
    raz_bars_base_exp(actor, x, y)
  end
  #==========================================================================
  # * Draw Parameter
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    type  : parameter type (0-6)
  #==========================================================================
  alias raz_bars_base_parameter draw_actor_parameter 
  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      para_color1 = Color.new(100,0,0)
      para_color2 = Color.new(255,0,0)
      para_begin = actor.atk
    when 1
      para_color1 = Color.new(100,100,0)
      para_color2 = Color.new(255,255,0)
      para_begin = actor.pdef
    when 2
      para_color1 = Color.new(100,0,100)
      para_color2 = Color.new(255,0,255)
      para_begin = actor.mdef
    when 3
      para_color1 = Color.new(50,0,100)
      para_color2 = Color.new(50,0,255)
      para_begin = actor.str
    when 4
      para_color1 = Color.new(0,100,0)
      para_color2 = Color.new(0,255,0)
      para_begin = actor.dex
    when 5
      para_color1 = Color.new(50,0,50)
      para_color2 = Color.new(255,0,255)
      para_begin = actor.agi
    when 6
      para_color1 = Color.new(0,100,100)
      para_color2 = Color.new(0,255,255)
      para_begin = actor.int
    end
    draw_slant_bar(x, y + 18, para_begin, 999, 155, 4, bar_color = para_color1,
      end_color = para_color2)
    raz_bars_base_parameter(actor, x, y, type)
  end
  #=========================================================================
  # * Draw Actor ATG
  #    actor : Actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    width : draw spot width
  #=========================================================================
  def draw_actor_atg(actor, x, y, width = 144, height = 6)
    if @at_gauge == nil
      # plus_x:    revised x-coordinate
      # rate_x:    revised X-coordinate as (%)
      # plus_y:    revised y-coordinate
      # plus_width: revised width
      # rate_width: revised width as (%)
      # height:    Vertical width
      # align1: Type 1 ( 0: left justify  1: center justify 2: right justify )
      # align2: Type 2 ( 0: Upper stuffing 1: Central arranging  2:Lower stuffing )
      # align3: Gauge type 0:Left justify 1: Right justify
      @plus_x = 0
      @rate_x = 0
      @plus_y = 16
      @plus_width = 0
      @rate_width = 100
      @width = @plus_width + width * @rate_width / 100
      @height = 6
      @align1 = 0
      @align2 = 1
      @align3 = 0
      # Gradation settings:  grade1: Empty gauge  grade2:Actual gauge
      # (0:On side gradation  1:Vertically gradation    2: Slantedly gradation)
      grade1 = 1
      grade2 = 0
      # Color setting. color1: Outermost framework, color2: Medium framework
      # color3: Empty framework dark color, color4: Empty framework light/write color
      color1 = Color.new(0, 0, 0)
      color2 = Color.new(255, 255, 192)
      color3 = Color.new(0, 0, 0, 192)
      color4 = Color.new(0, 0, 64, 192)
      # Color setting of gauge
      # Usually color setting of the time
      color5 = Color.new(0, 64, 80)
      color6 = Color.new(255, 255, 255)#(0, 128, 160)
      # When gauge is MAX, color setting
      color7 = Color.new(80, 0, 0)
      color8 = Color.new(255, 255,255) #(240,0,0)
      # Color setting at time of cooperation skill use
      color9 = Color.new(80, 64, 32)
      color10 = Color.new(255, 255, 255) #(240, 192, 96)
      # Color setting at time of skill permanent residence
      color11 = Color.new(80, 0, 64)
      color12 = Color.new(255,255, 255) #(240, 0, 192)
      # Drawing of gauge
      gauge_rect_at(@width, @height, @align3, color1, color2, color3, color4,
          color5, color6, color7, color8, color9, color10, color11, color12,
          grade1, grade2)
    end
    # Variable at substituting the width of the gauge which is drawn
    if actor.rtp == 0
      at = (width + @plus_width) * actor.atp * @rate_width / 10000
    else
      at = (width + @plus_width) * actor.rt * @rate_width / actor.rtp / 100
    end
    # AT Width Check
    if at > width
      at = width
    end
    # Revision such as the left stuffing central posture of gauge
    case @align1
    when 1
      x += (@rect_width - width) / 2
    when 2
      x += @rect_width - width
    end
    case @align2
    when 1
      y -= @height / 2
    when 2
      y -= @height
    end
    # Draw Border
    for i in 0..height
      self.contents.fill_rect(x + 1.5 + i, y + 12 + height - i, width - 2 , 3,
        Color.new(50, 50, 50, 255))
    end
    # Draw Background
    for i in 1..(height - 1)
      r = 100 * (height - i) / height + 0 * i / height
      g = 100 * (height - i) / height + 0 * i / height
      b = 100 * (height - i) / height + 0 * i / height
      a = 255 * (height - i) / height + 255 * i / height
      self.contents.fill_rect(x + 1.5 + i, y + 12 + height - i, width - 3, 3,
        Color.new(r, b, g, a))
    end
    # Rect_X control
    if @align3 == 0
      rect_x = 0
    else
      x += @width - at - 1
      rect_x = @width - at - 1
    end

    # Color setting of gauge
    if at == width
    #Gauge drawing at the time of MAX
      for i in 0..height
        self.contents.blt(x + i + @plus_x + @width * @rate_x / 100, y -i +
        @plus_y, @at_gauge, Rect.new(rect_x, @height * 2, at, @height))
      end
    else
      if actor.rtp == 0
        for i in 0..height
          # Usually gauge drawing of the time
          self.contents.blt(x + i + @plus_x + @width * @rate_x / 100, y- i +
            @plus_y, @at_gauge,Rect.new(rect_x, @height, at, @height))
        end
      else
        if actor.spell == true
          for i in 0..height
            #Gauge drawing at time of cooperation skill use
            self.contents.blt(x + i + @plus_x + @width * @rate_x / 100, y - i +
              @plus_y, @at_gauge, Rect.new(rect_x, @height * 3, at, @height))
          end
        else
          for i in 0..height             
            # Gauge drawing at time of skill permanent residence
            self.contents.blt(x + i + @plus_x + @width * @rate_x / 100, y - i +
              @plus_y, @at_gauge, Rect.new(rect_x, @height * 4, at, @height))
          end
        end
      end
    end
  end
  #=========================================================================
  # * Draw Actor Limit Break Bar
  #    actor : Actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    width : draw spot width
  #=========================================================================
  def draw_actor_lb(actor, x, y, width = 144)
    rate = actor.limitbreak.to_f / LB_MAX
    plus_x = 0
    rate_x = 0
    plus_y = 15
    plus_width = 0
    rate_width = 100
    height = 7
    lb = (width + plus_width) * actor.limitbreak * rate_width / 100 / LB_MAX
    # Drawing of gauge
    if actor.limitbreak == LB_MAX
      # Draw Silver Blue Bar
      draw_slant_bar(x + plus_x + width * rate_x / 100, y + plus_y, lb, width,
        width, height, od_color1 = Color.new(0,80,200,192),
        od_color2 = Color.new(255,255,255,192))
    else
      # Draw Green Bar
      draw_slant_bar(x + plus_x + width * rate_x / 100, y + plus_y, lb, width,
        width, height, od_color1 = Color.new(31, 128, 0, 128),
        od_color2 = Color.new(255, 255, 191))
    end
  end 
end



3.
แบบที่ 3 (แบบที่ใช้ใน CRISIS M.E.T.E.O.R ของท่านลู)
http://members.jcom.home.ne.jp/cogwheel/script/gauge_a.html
แถบพลังจะมีการเคลื่อนไหวตลอดเวลา

ปล.สคริปนี้จะไปตีกับสคริป Limit Break

------------------------------------------------------------------------------------------------------------------------------------------------------------------

Damage Display (เลขดาเมจหลากสี)
http://members.jcom.home.ne.jp/cogwheel/script/damage.html

วิธีใช้
1.โหลด d_rtab.zip ลงเครื่อง
2.ก็อป โฟลเดอร์ String ไปวางในโฟลเดอร์ Graphics ของเกม
3.ก็อปสคริปไปวาง


แก้ไขล่าสุดโดย boyhit เมื่อ Mon Oct 31, 2011 5:23 am, ทั้งหมด 1 ครั้ง




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

Re: [สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Thu Oct 27, 2011 1:44 am

การเอา Battlers มาใช้

ในสคริปนี้เราสามารถเลือกใช้ Battlers ได้หลายแบบ ทั้งแบบ 4 แถว 7แถว 12แถว
แล้วแต่จะอยากใช้หรืออยากใช้มากกว่า 12 แถวก็ได้ หรือจะใช้รูป Battlers
ปกติเลยก็ได้ โดยการตั้งท่าต่างๆสามารถดูได้ที่สคริป 1 - Configuration

เราสามารถเซตจำนวนแถว ได้ที่บรรทัด 33
MNK_POSES = 12 # Maximum # of poses (stances) in the template

12 คือจำนวนแถวที่จะใช้ทุกตัวละคร


เราสามารถเซตจำนวนเฟรม(จำนวนท่าทางการเคลื่อนไหว)ได้ที่บรรทัด 34
MNK_FRAMES = 4 # Maximum # of frames in each pose

4 คือจำนวนเฟรมที่จะใช้ทุกตัวละคร


โดยแต่ละแถวจะแสดงท่าทางอย่างไรมาดูที่ประมาณบรรทัด 59-70
Editable Template (Some people wanted to change their template design)
MNK_POSE1 = 1 #ท่าทางแถวที่1 ยืนปกติ
MNK_POSE2 = 2 #ท่าทางแถวที่2 บาดเจ็บ
MNK_POSE3 = 3 #ท่าทางแถวที่3 ใกล้ตาย
MNK_POSE4 = 4 #ท่าทางแถวที่4 ป้องกัน
MNK_POSE5 = 5 #ท่าทางแถวที่5 เดินซ้าย
MNK_POSE6 = 6 #ท่าทางแถวที่6 เดินขวา
MNK_POSE7 = 7 #ท่าทางแถวที่7 โจมตี1
MNK_POSE8 = 8 #ท่าทางแถวที่8 โจมตี2
MNK_POSE9 = 9 #ท่าทางแถวที่9 ทักษะ
MNK_POSE10 = 10 #ท่าทางแถวที่10 ชนะ
MNK_POSE11 = 11 #ท่าทางแถวที่11 ตาย
MNK_POSE12 = 12 #ท่าทางแถวที่12 ใช้ไอเทม

MNK_POSE 1-12 คือท่าทางที่จะใช้ตอนเกิดกิจกรรมต่างๆ(ดูด้านหลังของบรรทัด)
เลข1-12 หลัง = คือแถวของรูปที่จะใช้แสดงเวลาเกิิดท่าทางต่างๆ


โจมตี1-2 จะสุ่มการแสดงอัตโนมัติ

*********************************************************************************************

ตัวอย่างการเซต Battlers

การเอารูป Battlers มาใช้เลย(รูปไม่มีการขยับ)

ให้ไป บรรทัดที่ 25
DEFAULT_ACTOR_ID = [1,2,10] #ใส่เฉพาะ ID ที่ต้องการใช้รูป Battlers เลย

ในที่นี้คือฮีโร่ ID 1,2,10 จะใช้รูป Battlers แบบไม่เคลื่อนไหว

*********************************************************************************************

แบบ 4 แถว เช่นพวก Characters ธรรมดา

1.ก็ให้ก็อบ Characters ไปใส่ใน Battlers แล้วก็เซต Battlers เป็นอันนั้น
2.จากนั้นไปเซตจำนวนแถวที่ใช้ตรง
MNK_POSES_ACTOR = {2 => 4}

2=ID ฮีโร่
4=จำนวนแถว


3.จากนั้นก็ไปเซตท่าทางที่
Editable Template (for Custom Actor Spritesheets)
MNK_APOSE1 = {2 => 2}
MNK_APOSE2 = {2 => 2}
MNK_APOSE3 = {2 => 2}
MNK_APOSE4 = {2 => 2}
MNK_APOSE5 = {2 => 2}
MNK_APOSE6 = {2 => 3}
MNK_APOSE7 = {2 => 2}
MNK_APOSE8 = {2 => 2}
MNK_APOSE9 = {2 => 2}
MNK_APOSE10 = {2 => 1}
MNK_APOSE11 = {2 => 4}
MNK_APOSE12 = {2 => 2}

2 ตัวแรกคือID ฮีโร่
2 ตัวหลังแถวที่ใช้
MNK_APOSE1-11 ท่าทางต่างๆดูรายละเอียดที่ด้านบน

เป็นอันเสร็จสิ้น

ในกรณีที่เราจะใส่หลายๆตัวละครก็จะใส่ว่า
{2 => 2 , 7 => 2 , 9 => 2}

IDฮีโร่คือ 2,7,9

*********************************************************************************************

แบบ 7 แถว

1.หา Battlers ที่ 7 แถวดังตัวอย่างไปลง
2.จากนั้นไปเซตจำนวนแถวที่ใช้ตรง
MNK_POSES_ACTOR = {2 => 7}

2=IDฮีโร่
7=จำนวนแถว

3.จากนั้นก็ไปเซตท่าทางที่
Editable Template (for Custom Actor Spritesheets)
ตัวอย่างการเซต Battlers ตามรูป
MNK_APOSE1 = {9 => 2}
MNK_APOSE2 = {9 => 4}
MNK_APOSE3 = {9 => 7}
MNK_APOSE4 = {9 => 3}
MNK_APOSE5 = {9 => 1}
MNK_APOSE6 = {9 => 4}
MNK_APOSE7 = {9 => 5}
MNK_APOSE8 = {9 => 5}
MNK_APOSE9 = {9 => 6}
MNK_APOSE10 = {9 => 2}
MNK_APOSE11 = {9 => 7}
MNK_APOSE12 = {9 => 6}


*********************************************************************************************

แบบ 11 แถว

1.หา Battlers ที่ 7 แถวดังตัวอย่างไปลง
2.จากนั้นไปเซตจำนวนแถวที่ใช้ตรง
MNK_POSES_ACTOR = {2 => 11}

2=IDฮีโร่
11=จำนวนแถว

3.จากนั้นก็ไปเซตท่าทางที่
Editable Template (for Custom Actor Spritesheets)
ตัวอย่างการเซต Battlers ตามรูป
MNK_APOSE1 = {9 => 1}
MNK_APOSE2 = {9 => 2}
MNK_APOSE3 = {9 => 3}
MNK_APOSE4 = {9 => 4}
MNK_APOSE5 = {9 => 5}
MNK_APOSE6 = {9 => 6}
MNK_APOSE7 = {9 => 7}
MNK_APOSE8 = {9 => 7}
MNK_APOSE9 = {9 => 8}
MNK_APOSE10 = {9 => 10}
MNK_APOSE11 = {9 => 11}
MNK_APOSE12 = {9 => 8}


*********************************************************************************************

ถ้าเป็นศัตรูก็ไปแก้สคริปที่ส่วน
Editable Template (for Custom Enemy Spritesheets)


*********************************************************************************************

ในตัวสคริป Minkoff ที่ผมลงที่เรปแรก ผมตั้งให้เป็นแบบ 12 แถวอยู่แล้ว
ถ้าใครใช้ Battlers แบบ 12 แถวอยู่แล้วก็ไม่ต้องมาตั้งค่าพวกนี้




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

Re: [สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Thu Oct 27, 2011 1:48 am

ถ้าต้องการสลับตำแหน่งการต่อสู้

ก่อนเริ่มการต่อสู้ให้ใส่โค๊ตว่า
Code:
$sideview_mirror = 1
(หรือจะใส่ตั้งแต่เริ่มเกมเลยก็ได้)

เมื่อกลับด้านแล้วรูป Battlers ต่างๆจะกลับด้านให้เองโดยอัตโนมัติ
สรุปก็คือให้วาด Battlers หันไปทางซ้ายทั้งหมดเป็นดี

ถ้าต้องการให้เป็นแบบเดิมก็ใส่
Code:
$sideview_mirror = 0



ปล.แต่สคริปนี้มีข้อเสียตรงที่ อนิเมชั่นมันไม่ได้กลับด้านด้วย เวลาตีศัตรูมันเลยพิลิกๆไงไม่รู้

------------------------------------------------------------------------------------------------------------------------------------------------------------------

การปรับแต่งอื่นๆ

มอนสเตอร์ตัวไหนที่ไม่ต้องการให้เคลื่อนที่ไปปรับที่นี่
MNK_STATIONARY_ENEMY_IDS = [31,32,33,34,37] # (IDมอนสเตอร์ ที่ไม่มีการเคลื่อนที่)

อาวุธอันไหนที่ไม่ต้องการให้เคลื่อนที่ไปปรับที่นี่
MNK_STATIONARY_WEAPONS = [167,168,169,170,171] # (IDอาวุธประเภทธนูและปืน ที่ไม่มีการเคลื่อนที่)

ทักษะอันไหนที่ไม่ต้องการให้เคลื่อนที่ไปปรับที่นี่
MNK_STATIONARY_SKILLS = []# (IDทักษะ ที่ไม่มีการเคลื่อนที่)

ไอเทมอันไหนที่ไม่ต้องการให้เคลื่อนที่ไปปรับที่นี่
MNK_STATIONARY_ITEMS = []# (IDไอเทม ที่ไม่มีการเคลื่อนที่)

ถ้าอยากให้เวลาวิ่งไปโจมตีศัตรูแล้วจะไม่หายไปแวบนึงไปปรับที่นี่
MNK_PHASING = true # If battlers fade in/out while charging

ปรับเป็น false เป็นอันเรียบร้อย แต่ถ้าตัวละครยังอยากให้หายอยู่ก็ใส่ ID ตัวละครใน
MNK_PHASING_ACTOR = [1] # IDs of actors that fade in/out if charging
MNK_PHASING_ENEMY = [9] # IDs of enemies that fade in/out if charging


ถ้าลงสคริปแล้วไม่มีตัวอักษรขึ้น

ให้ไปที่สคริป Main แล้วใส่
$fontface = "CordiaUPC" #ใส่ฟอนท์ที่ต้องการ
$fontsize = 40 #ใส่ขนาดฟอนท์ที่ต้องการ
Font.default_name = $fontface
Font.default_size = $fontsize

ต่อจาก
begin
เครดิต Shinryu




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

Re: [สคริปต์] ระบบฉากต่อสู้ด้านข้าง (Minkoff) ดัดแปลงโดย Shinryu

ตั้งหัวข้อ by boyhit on Mon Oct 31, 2011 5:25 am

วันนี้ขอเสนอ

สคริปปรับแต่งการต่อสู้
อันนี้ตัวต้นแบบ
Code:
# RTAB Configuration System
# Support bulletin board http: http://www2.ezbbs.net/21/minto-aaa/
#
# Updated for use with:
# Real time active battle (RTAB) Ver 1.12
# Distribution original support URL
# http://members.jcom.home.ne.jp/cogwheel/

=begin

REVISED:
This script brings up an options menu geared to handle the speed, action and
camera functions of Cogwheel's RTAB CBS. 

Originally designed and encorporated in a working main menu, you will note on
line 368 of this script that the designer intended the menu to return to menu
option #6 ( $scene = Scene_Menu.new(6) ). 

As $scene = Scene_Menu.new(5) would have returned to the menu, highlighting the
"End Game" option, the designer's menu obviously had more than the default num-
ber of options.

Obviously for anyone designing their own menu, this system is already set up
to be encorporated into your own menu.  But for those who want a system where
an event (such as a savepoint-like object) brings up the RTAB configuration
menu, you merely need to alter line #368 as such: 

                          $scene = Scene_Map.new

-------------------------------------------------------------------------------

To call this script, use: 

                      $scene = Scene_Customize.new

=end



#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles data surrounding the system. Backround music, etc.
#  is managed here as well. Refer to "$game_system" for the instance of
#  this class.
#==============================================================================
class Game_System
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor  :battle_speed          # ????
  attr_accessor  :battle_active          # ?????
  attr_accessor  :battle_camera          # ?????
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias initialize_MINT_RTAB_Customize initialize
  def initialize
    # Call original initialization process
    initialize_MINT_RTAB_Customize
    @battle_speed = 150                # Default:  RTAB speed
    @battle_active = 2                  # Default:  Wait during Item/Skill Select
    @battle_camera = false              # Default:  Camera turned off
  end
end

#==============================================================================
# ** Window_Customize
#==============================================================================
class Window_Customize < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(160, 92, 320, 288)   
    @column_max = 1
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    @element = []
    #Acquiring the skill which you have acquired
    get_data
    get_element
    # If the number of items is not 0, drawing item
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Acquire the menu option items
  #--------------------------------------------------------------------------
  def get_data
    data = [
    "Battle speed",
    "Active",
    "Camera work"]
    @data = data
  end
  #--------------------------------------------------------------------------
  # * Acquire the menu option settings
  #--------------------------------------------------------------------------
  def get_element
    case $game_system.battle_active
    when 1
      active = "Wait"
    when 2
      active = "Semi active"
    else
      active = "Full active"
    end
    if $game_system.battle_camera
      camera = "ON"
    else
      camera = "OFF"
    end   
    data = [$game_system.battle_speed.to_s, active, camera]
    @element = data
  end   
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    deta = @element[index]
    x = 0
    y = index * 32   
    self.contents.draw_text(x + 4, y, 140, 32, item, 0)
    self.contents.draw_text(x + 144, y, 140, 32, deta, 2)
  end
  #--------------------------------------------------------------------------
  # * Set Help Text
  #--------------------------------------------------------------------------
  def help_text(index)
    case index
    when 0
      text = "Modifies the combat speed. Lower numbers increases combat speed."
    when 1
      text = "Modifies the flow of time in battle"
    else
      text = "Sets whether the camera follows the moving battler."
    end
  end
  #--------------------------------------------------------------------------
  # * Update Help Text
  #--------------------------------------------------------------------------
  def update_help   
    text = help_text(self.index)
    @help_window.set_text(text)
  end
end


#==============================================================================
# ** Window_Command2
#------------------------------------------------------------------------------
#  This window deals with new command choices.
#==============================================================================
class Window_Command2 < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object initilization
  #--------------------------------------------------------------------------
  def initialize(width, commands)
    # Calculating the height of the window from the quantity of command
    super(0, 0, width, commands.size * 32 + 32)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index : item number
  #    color : text color
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    self.contents.font.size = 20
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
  #--------------------------------------------------------------------------
  # * Disable Item
  #    index : item number
  #--------------------------------------------------------------------------
  def disable_item(index)
    draw_item(index, disabled_color)
  end
  #--------------------------------------------------------------------------
  # * Set Help Text
  #--------------------------------------------------------------------------
  def help_text(index)
    case index
    when 0
      text = "Pauses when choosing a Skill, an Item or an Enemy. (Beginners)"
    when 1
      text = "Pauses when the Skill or Item windows are active. (Recommended)"     
    else
      text = "Action never pauses.  (Expert-mode)"
    end
  end
  #--------------------------------------------------------------------------
  # * Update Help Text
  #--------------------------------------------------------------------------
  def update_help   
    text = help_text(self.index)
    @help_window.set_text(text)
  end
end

#==============================================================================
# ** Window_Help2
#------------------------------------------------------------------------------
#  This window shows explanations for new options.
#==============================================================================
class Window_Help2 < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 420, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.pause = false
  end
  #--------------------------------------------------------------------------
  # * Set Text
  #  text  : text string displayed in window
  #  align : alignment (0..flush left, 1..center, 2..flush right)
  #--------------------------------------------------------------------------
  def set_text(text, align = 1) 
    # If at least one part of text and alignment differ from last time
    if text != @text or align != @align
      # Redraw text
      self.contents.clear
      self.contents.font.color = normal_color
      self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
      @text = text
      @align = align
      @actor = nil
    end
    self.visible = true
  end
end

#==============================================================================
# ** Scene_Customize
#------------------------------------------------------------------------------
#  This class performs RTAB Player Options decisions
#==============================================================================

class Scene_Customize 
  #--------------------------------------------------------------------------
  # * Main processing
  #--------------------------------------------------------------------------
  def main
    # Make help window, main window
    @help_window = Window_Help2.new     
    @main_window = Window_Customize.new
    @main_window.refresh
    @dummy_window = Window_Base.new(480,92,100,64)
    @dummy_window.visible = false
    @number_window = Window_InputNumber.new(3)
    @number_window.x = 480
    @number_window.y = 92
    @number_window.visible = false
    @number_window.active = false
    command = ["Wait", "Semi-Active", "Fully-Active"]
    camera_command = ["On", "Off"]
    @command_window = Window_Command2.new(120, command)
    @command_window.x = 480
    @command_window.y = 136
    @command_window.visible = false
    @command_window.active = false   
    @camera_window = Window_Command.new(120, camera_command)
    @camera_window.x = 480
    @camera_window.y = 172
    @camera_window.visible = false
    @camera_window.active = false
    # Associate help window
    @main_window.help_window = @help_window
    @command_window.help_window = @help_window
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @help_window.dispose
    @main_window.dispose
    @number_window.dispose
    @dummy_window.dispose
    @command_window.dispose
    @camera_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # If main window is active: call update_main
    if @main_window.active
      @main_window.update
      update_main
      return
    end
    if @number_window.active
      @number_window.update
      update_number
      return
    end
    if @command_window.active
      @command_window.update
      update_command
      return
    end
    if @camera_window.active
      @camera_window.update
      update_camera
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Main Update (when main window is active)
  #-------------------------------------------------------------------------- 
  def update_main
    # If B Button is pressed
    if Input.trigger?(Input::B)
      # Play Cancel SE
      $game_system.se_play($data_system.cancel_se)
     
      # Return to Menu (THIS is where you return from an options menu)
      #$scene = Scene_Menu.new(6)
      $scene = Scene_Map.new
     
      return
    end
    # If C Button was pressed
    if Input.trigger?(Input::C)
      # Branch by main command decision
      @index = @main_window.index
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      case @index
      when 0
        @number_window.active = true
        @number_window.visible = true
        @dummy_window.visible = true
        @main_window.active = false
      when 1
        @command_window.active = true
        @command_window.visible = true
        @main_window.active = false
      when 2
        @camera_window.active = true
        @camera_window.visible = true
        @main_window.active = false 
      when 3
        @camera_window.active = true
        @camera_window.visible = true
        @main_window.active = false
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Number Update (when number window is active)
  #--------------------------------------------------------------------------
  def update_number
    # If B Button was pressed
    if Input.trigger?(Input::B)
      # Play Cancel SE
      $game_system.se_play($data_system.cancel_se)
      @number_window.active = false
      @number_window.visible = false
      @dummy_window.visible = false
      @main_window.active = true
      return
    end
    # If C Button was Pressed
    if Input.trigger?(Input::C)
      # Obtain Current RTAB Battle Speed
      $game_system.battle_speed = @number_window.number
      $game_system.battle_speed = 1 if @number_window.number == 0
      # Play Decision SE
      $game_system.se_play($data_system.decision_se)
      @number_window.active = false
      @number_window.visible = false
      @dummy_window.visible = false
      @main_window.active = true
      @main_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Command Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # If B Button was pressed
    if Input.trigger?(Input::B)
      # Play Cancel SE
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = false
      @command_window.visible = false
      @main_window.active = true
      return
    end
    # If C Button was pressed
    if Input.trigger?(Input::C)
      # Branch by "Active" window cursor position
      case @command_window.index
      when 0
        $game_system.battle_active = 1
      when 1
        $game_system.battle_active = 2
      when 2
        $game_system.battle_active = 3
      end     
      # Play Decision SE
      $game_system.se_play($data_system.decision_se)
      @command_window.active = false
      @command_window.visible = false
      @main_window.active = true
      @main_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Camera Update (when camera window is active)
  #--------------------------------------------------------------------------
  def update_camera
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play Cancel SE
      $game_system.se_play($data_system.cancel_se)
      @camera_window.active = false
      @camera_window.visible = false
      @main_window.active = true
      return
    end
    # If C Button was pressed
    if Input.trigger?(Input::C)
      # Branch by camera window cursor position
      case @camera_window.index
      when 0
        $game_system.battle_camera = true
      when 1
        $game_system.battle_camera = false
      end     
      # Play Decision SE
      $game_system.se_play($data_system.decision_se)
      @camera_window.active = false
      @camera_window.visible = false
      @main_window.active = true
      @main_window.refresh
      return
    end
  end
end

#==============================================================================
# Real time active battle (RTAB) Ver 1.12
#==============================================================================
# ** Scene_Battle
#==============================================================================

class Scene_Battle 
  #--------------------------------------------------------------------------
  # * ATB fundamental setup
  #--------------------------------------------------------------------------
  def atb_setup
    # ATB initialization
    #
    # speed  : Battle speed decision. The lower the value, the faster the system
    #
    # @active : Degree of active setting
    #          3 : Always active state
    #          2 : ATB pauses when selecting skill/item
    #          1 : Same as 2, but pauses during target selection
    #          0 : Same as 1, but pauses during command window selection.
    #
    # @action : Others while acting is the fact that by their causes conduct permitted?
    #          3 : If by his is not incapacitation, limited to you permit
    #          2 : If by his has not received the damage, you permit
    #          1 : In addition to the state of 2, if the target has not acted, you permit
    #          0 : Conduct is not permitted. Until it finishes to act in order, it waits
    #
    # @anime_wait : When it makes true, during battle animation damage indicating wait catches
    # @damage_wait : Damage indicatory waiting (as for unit frame)
    #
    # @after_wait : At the time of ally enemy total loss,  until moves to next processing, waiting
    #              [a, b]  a) At the time of party total loss,  b) At time of enemy total loss (unit frame)
    #
    # @enemy_speed : Thought speed of enemy. If 1 immediately conduct.
    #                In every frame, conduct is caused with the probability of 1/@enemy_speed
    #
    # @force : With forced action forced condition at time of skill use
    #          2: As for skill everything not to reside permanently, by all means immediately execution
    #          1: As for independent skill to reside permanently, only cooperation skill immediately execution
    #          0: All the skill permanent residence just are done
    #
    # ($scene.force = Usually by making x, from the script of the event modification possibility)
    #
    # CAMERA DRIVE SYSTEM:  This system moves the Camera POV to the currently moving battler
    # @drive      : Camera drive system ON/OFF.  When true, drive ON, when false drive OFF
    # @scroll_time : Time it takes to scroll/move the camera POV during battle
    #
    # @zoom_rate = [i, j] : Zoom Rate (Changes the size of the enemy based on perspective)
    #                      i) When arranging in the picture first section, enlargement ratio
    #                      j) When arranging in the picture lowest section, enlargement ratio
    #                      1  When liking to make time, 1.0 be sure to set with decimal

    speed = $game_system.battle_speed    # IN FRAMES / FOR ATB SYSTEM
    @active = $game_system.battle_active  # Active Setting (Range of 0 - 3)
    @action = 2                          # Action Setting (Range of 0 - 3)
    @anime_wait = false                  #
    @damage_wait = 10                    #
    @after_wait = [80, 0]                #
    @enemy_speed = 40                    #
    @force = 0                            #
    @drive = $game_system.battle_camera  # Turns camera system on/off
    @scroll_time = 15                    # Speed of camera system
    @zoom_rate = [1.0, 1.0]              # Change size of battler based on perspective
    @help_time = 40
    @escape == false
    @camera = nil
    @max = 0
    @turn_cnt = 0
    @help_wait = 0
    @action_battlers = []
    @synthe = []
    @spell_p = {}
    @spell_e = {}
    @command_a = false
    @command = []
    @party = false

    for battler in $game_party.actors + $game_troop.enemies
      spell_reset(battler)
      battler.at = battler.agi * rand(speed / 2)
      battler.damage_pop = {}
      battler.damage = {}
      battler.damage_sp = {}
      battler.critical = {}
      battler.recover_hp = {}
      battler.recover_sp = {}
      battler.state_p = {}
      battler.state_m = {}
      battler.animation = []
      if battler.is_a?(Game_Actor)
        @max += battler.agi
      end
    end

    @max *= speed
    @max /= $game_party.actors.size

    for battler in $game_party.actors + $game_troop.enemies
      battler.atp = 100 * battler.at / @max
    end
  end
end 

วิธีลง
เอาสคริปนี้ไปวางใต้สคริป Sideviewbattle ทั้งหมด

วิธีใช้
-เรียกสคริปด้วย
CODE
$scene = Scene_Customize.new

-Battle speed = ความเร็วฉากต่อสู้ยิ่งเลขน้อยยิ่งแถบขึ้นเร็ว(ศัตรูก็ขึ้นเร็วด้วย)
-Active = ปรับให้ระหว่างต่อสู้ว่ามีการรอขณะเลือกคำสั่งหรือเปล่า?(แบบไฟนอลนะ)
-Camera work = มีการใช้การซูมระหว่างโจมตี

อันนี้ผมเอามาดัดแปลง แก้เป็นภาษาไทย+ตัดเมนูซูมออกไป
Code:
#ŸžŸžŸ  RTABEƒRƒ“ƒtƒBƒ“ƒOEƒVƒXƒeƒ€ ver 1.10  žŸžŸž
#  ƒTƒ|[ƒgŒfŽฆ”ย http://www2.ezbbs.net/21/minto-aaa/
#  by ‚‚๑‚ฦ

# ƒŠƒAƒ‹ƒ^ƒCƒ€EƒAƒNƒeƒBƒuƒoƒgƒ‹(RTAB) Ver 1.10
# ”z•zŒณEƒTƒ|[ƒgURL
# http://members.jcom.home.ne.jp/cogwheel/
# by ƒVƒ‡ƒE

=begin

XV—š—๐ 1.10
ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE‚ฬ–ผ‘O‚ชA
Ž•Žิ‚ฬ้‚ณ‚๑‚ฬƒƒjƒ…[‰‘ข‚ฬ‚เ‚ฬ‚ฦ”ํ‚ม‚ฤ‚ข‚ฝ‚ฬ‚ล•ฯXB
iƒwƒ‹ƒv‚ช”ํ‚ม‚ฤŒฉ‚ฆ‚ศ‚ญ‚ศ‚้‚ฝ‚฿j
ƒŒƒCƒAƒEƒg‚เŽแŠฑCณB

‚‚๑‚ฦ‚ฬ‚จ•”‰ฎ‚ฬƒ}ƒXƒ^[ƒXƒNƒŠƒvƒg‚อ—v‚่‚‚น‚๑
RTAB–{‘ฬ‚ๆ‚่A‰บ‚ษ“ฑ“‚ต‚ฤ‚ญ‚พ‚ณ‚ข

‚ศ‚จA‚ฑ‚ฬƒXƒNƒŠƒvƒg‚ฬŽฟ–โ‹y‚ัƒTƒ|[ƒg‚อ
‚‚๑‚ฦ‚ฬ‚จ•”‰ฎ‚‚ล‚จŠ่‚ข‚ต‚‚ท

‚ศ‚จAƒRƒ“ƒtƒBƒ“ƒO‰ๆ–ส‚ฬŒฤ‚ัo‚ต‚อ

$scene = Scene_Customize.new

‚ฦ“—อ‚ต‚ฤ‚ญ‚พ‚ณ‚ข

=end

#==============================================================================
# ก Game_System
#==============================================================================

class Game_System 
  #--------------------------------------------------------------------------
  # œ Œ๖ŠJƒCƒ“ƒXƒ^ƒ“ƒX•ฯ”
  #--------------------------------------------------------------------------
  attr_accessor  :battle_speed          # ํ“ฌ‘ฌ“x
  attr_accessor  :battle_active          # ƒAƒNƒeƒBƒu
  attr_accessor  :battle_camera          # ƒJƒƒ‰‰า“ฎ
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Š๚‰ป
  #--------------------------------------------------------------------------
  alias initialize_MINT_RTAB_Customize initialize
  def initialize
    # Œณ‚ฬˆ—‚๐Žภs
    initialize_MINT_RTAB_Customize
    @battle_speed = 150
    @battle_active = 2
    @battle_camera = true
  end
end
#==============================================================================
# ก Window_Customize
#==============================================================================

class Window_Customize < Window_Selectable
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Š๚‰ป
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 320, 96)   
    @column_max = 1
    refresh
    self.index = 0
    self.opacity = 200  # เพิ่ม
  end
  #--------------------------------------------------------------------------
  # œ ƒŠƒtƒŒƒbƒVƒ…
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    @element = []
    # K“พ‚ต‚ฤ‚ข‚้ƒXƒLƒ‹‚๐Žๆ“พ
    get_data
    get_element
    # €–ฺ”‚ช0‚ล‚ศ‚ฏ‚๊‚ฮ€–ฺ‚๐•`‰ๆ
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # œ •`Žส‚ท‚้€–ฺ‚๐Žๆ“พ
  #--------------------------------------------------------------------------
  def get_data
    data = [
    "ความเร็วฉากต่อสู้",
    "โหมดต่อสู้"]
    @data = data
  end
  #--------------------------------------------------------------------------
  # œ €–ฺ‚ฬƒf[ƒ^‚๐Žๆ“พ
  #--------------------------------------------------------------------------
  def get_element
    case $game_system.battle_active
    when 1
      active = "หยุดรอ"
    when 2
      active = "ต่อเนื่อง"
    else
      active = "ไม่หยุดรอ"
    end
    if $game_system.battle_camera
      camera = "ปิด"
    else
      camera = "เปิด"
    end   
    data = [$game_system.battle_speed.to_s, active, camera]
    @element = data
  end   
  #--------------------------------------------------------------------------
  # œ €–ฺ‚ฬ•`‰ๆ
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    deta = @element[index]
    x = 0
    y = index * 32   
    self.contents.draw_text(x, y, 288, 32, item, 0)
    self.contents.draw_text(x, y, 288, 32, deta, 2)
  end
  #--------------------------------------------------------------------------
  # œ ƒwƒ‹ƒvƒeƒLƒXƒgŽๆ“พ
  #--------------------------------------------------------------------------
  def help_text(index)
    case index
    when 0
      text = "แก้ไขความเร็วฉากต่อสู้(ตัวเลขน้อยๆจะทำให้ความเร็วการต่อสู้เพิ่มขึ้น)"
    when 1
      text = "แก้ไขโหมดการต่อสู้ว่ามีการรอขณะเลือกคำสั่งหรือเปล่า?"
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒwƒ‹ƒvƒeƒLƒXƒgXV
  #--------------------------------------------------------------------------
  def update_help   
    text = help_text(self.index)
    @help_window.set_text(text)
  end
end
#==============================================================================
# ก Window_Command2
#==============================================================================

class Window_Command2 < Window_Selectable
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Š๚‰ป
  #--------------------------------------------------------------------------
  def initialize(width, commands)
    # ƒRƒ}ƒ“ƒh‚ฬŒย”‚ฉ‚็ƒEƒBƒ“ƒhƒE‚ฬ‚‚ณ‚๐ŽZo
    super(0, 0, width, commands.size * 32 + 32)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # œ ƒŠƒtƒŒƒbƒVƒ…
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # œ €–ฺ‚ฬ•`‰ๆ
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
  #--------------------------------------------------------------------------
  # œ €–ฺ‚ฬ–ณŒ๘‰ป
  #--------------------------------------------------------------------------
  def disable_item(index)
    draw_item(index, disabled_color)
  end
  #--------------------------------------------------------------------------
  # œ ƒwƒ‹ƒvƒeƒLƒXƒgŽๆ“พ
  #--------------------------------------------------------------------------
  def help_text(index)
    case index
    when 0
      text = "หยุดทุกสถานะการณ์เมื่อมีเหตุการณ์ใดๆเกิดขึ้น(สำหรับผู้เริ่มเล่น)"
    when 1
      text = "หยุดเมื่อมีการโจมตีหรือใช้ทักษะต่างๆ(สำหรับผู้ที่คล่องแล้ว)"     
    else
      text = "ไม่มีการหยุดคอย(สำหรับผู้ที่ชำนาญ)"
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒwƒ‹ƒvƒeƒLƒXƒgXV
  #--------------------------------------------------------------------------
  def update_help   
    text = help_text(self.index)
    @help_window.set_text(text)
  end
end

#==============================================================================
# ก Window_Help_RTAB
#==============================================================================

class Window_Help_RTAB < Window_Base
  #--------------------------------------------------------------------------
  # œ ƒIƒuƒWƒFƒNƒg‰Š๚‰ป
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 200  # เพิ่ม
    self.pause = false
  end
  #--------------------------------------------------------------------------
  # œ ƒeƒLƒXƒg’่
  #--------------------------------------------------------------------------
  def set_text(text, align = 0)   
    # ƒeƒLƒXƒg‚ฦƒAƒ‰ƒCƒ“ƒƒ“ƒg‚ฬญ‚ศ‚ญ‚ฦ‚เˆ๊•๛‚ช‘O‰๑‚ฦˆแ‚ม‚ฤ‚ข‚้๊‡
    if text != @text or align != @align
      # ƒeƒLƒXƒg‚๐ฤ•`‰ๆ
      self.contents.clear
      self.contents.font.color = normal_color
      width = self.width - 40
      # ‰s‚ฬ”ป’่•ถŽš
      split = " "
      text1 = text.split(/#{split}/)[0].to_s
      text2 = text.split(/#{split}/)[1].to_s
      text3 = text.split(/#{split}/)[2].to_s
      text4 = text.split(/#{split}/)[3].to_s
      text5 = text.split(/#{split}/)[4].to_s
      self.contents.draw_text(4, 0, width, 32, text1, align)
      self.contents.draw_text(4, 32, width, 32, text2, align)
      self.contents.draw_text(4, 64, width, 32, text3, align)
      self.contents.draw_text(4, 96, width, 32, text4, align)
      self.contents.draw_text(4, 128, width, 32, text5, align)
      @text = text
      @align = align
    end
    self.visible = true
  end
end
#==============================================================================
# ก Scene_Customize
#==============================================================================

class Scene_Customize 
  #--------------------------------------------------------------------------
  # œ ƒƒCƒ“ˆ—
  #--------------------------------------------------------------------------
  def main
    # ƒXƒvƒ‰ƒCƒgƒZƒbƒg‚๐์ฌ
    #@spriteset = Spriteset_Map.new
    # ƒEƒBƒ“ƒhƒE‚๐์ฌ
    #เพิ่ม
    if $pic_as_back == true
      @sprite = Sprite.new
    else
      @map = Spriteset_Map.new
    end
    #จบ
    @help_window = Window_Help_RTAB.new     
    @main_window = Window_Customize.new
    @main_window.refresh
    @dummy_window = Window_Base.new(320,64,110,64)
    @dummy_window.visible = false
    @number_window = Window_InputNumber.new(3)
    @number_window.x = 320
    @number_window.y = 64
    @number_window.opacity = 160
    @number_window.visible = false
    @number_window.active = false
    command = ["หยุดรอ", "ต่อเนื่อง", "ไม่หยุดรอ"]
    camera_command = ["ON", "OFF"]
    @command_window = Window_Command2.new(160, command)
    @command_window.x = 320
    @command_window.y = 64
    @command_window.opacity = 160
    @command_window.visible = false
    @command_window.active = false   
    @camera_window = Window_Command.new(120, camera_command)
    @camera_window.x = 480
    @camera_window.y = 240
    @camera_window.visible = false
    @camera_window.active = false
    # ƒwƒ‹ƒvƒEƒBƒ“ƒhƒE‚๐Šึ˜A•t‚ฏ
    @main_window.help_window = @help_window
    @command_window.help_window = @help_window
Graphics.transition(20, "Graphics/Transitions/" +"004-Blind04")#เพิ่ม
    # ƒgƒ‰ƒ“ƒWƒVƒ‡ƒ“Žภs
    Graphics.transition
    # ƒƒCƒ“ƒ‹[ƒv
    loop do
      # ƒQ[ƒ€‰ๆ–ส‚๐XV
      Graphics.update
      # “—อ๎•๑‚๐XV
      Input.update
      # ƒtƒŒ[ƒ€XV
      update
      # ‰ๆ–ส‚ชุ‚่‘ึ‚ํ‚ม‚ฝ‚็ƒ‹[ƒv‚๐’†’f
      if $scene != self
        break
      end
    end
    # ƒgƒ‰ƒ“ƒWƒVƒ‡ƒ“€”๕
    Graphics.freeze
    # ƒXƒvƒ‰ƒCƒgƒZƒbƒg‚๐‰๐•๚
    #@spriteset.dispose
    # ƒEƒBƒ“ƒhƒE‚๐‰๐•๚
    @help_window.dispose
    @main_window.dispose
    @number_window.dispose
    @dummy_window.dispose
    @command_window.dispose
    @camera_window.dispose
    #เพิ่ม
    if $pic_as_back == true
      @sprite.dispose
    else
      @map.dispose
    end
    #จบ
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV
  #--------------------------------------------------------------------------
  def update
    # ƒEƒBƒ“ƒhƒE‚๐XV
    if @main_window.active
      @main_window.update
      update_main
      return
    end
    if @number_window.active
      @number_window.update
      update_number
      return
    end
    if @command_window.active
      @command_window.update
      update_command
      return
    end
    if @camera_window.active
      @camera_window.update
      update_camera
      return
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒƒCƒ“ƒEƒBƒ“ƒhƒE‚ชƒAƒNƒeƒBƒu‚ฬ๊‡)
  #--------------------------------------------------------------------------
  def update_main
    # B ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::B)
      # ƒLƒƒƒ“ƒZƒ‹ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.cancel_se)
      # ƒƒjƒ…[‰ๆ–ส‚ษุ‚่‘ึ‚ฆ
      $scene = Scene_Option.new
      return
    end
    # C ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::C)
      # ƒCƒ“ƒfƒbƒNƒX‚๐Žๆ“พ
      @index = @main_window.index
      # Œˆ’่ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.decision_se)
      case @index
      when 0
        @number_window.active = true
        @number_window.visible = true
        @dummy_window.visible = true
        @main_window.active = false
      when 1
        @command_window.active = true
        @command_window.visible = true
        @main_window.active = false
      when 2
        @camera_window.active = true
        @camera_window.visible = true
        @main_window.active = false 
      when 3
        @camera_window.active = true
        @camera_window.visible = true
        @main_window.active = false
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (”’l“—อƒEƒBƒ“ƒhƒE‚ชƒAƒNƒeƒBƒu‚ฬ๊‡)
  #--------------------------------------------------------------------------
  def update_number
    # B ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::B)
      # ƒLƒƒƒ“ƒZƒ‹ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.cancel_se)
      @number_window.active = false
      @number_window.visible = false
      @dummy_window.visible = false
      @main_window.active = true
      return
    end
    # C ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::C)
      # ”’l‚๐Žๆ“พ‚ต‚ฤ‘ใ“
      $game_system.battle_speed = @number_window.number
      $game_system.battle_speed = 1 if @number_window.number == 0
      # Œˆ’่ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.decision_se)
      @number_window.active = false
      @number_window.visible = false
      @dummy_window.visible = false
      @main_window.active = true
      @main_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒRƒ}ƒ“ƒhƒEƒBƒ“ƒhƒE‚ชƒAƒNƒeƒBƒu‚ฬ๊‡)
  #--------------------------------------------------------------------------
  def update_command
    # B ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::B)
      # ƒLƒƒƒ“ƒZƒ‹ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = false
      @command_window.visible = false
      @main_window.active = true
      return
    end
    # C ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::C)
      # ƒCƒ“ƒfƒbƒNƒX‚๐Žๆ“พ‚ต‚ฤ‘ใ“
      case @command_window.index
      when 0
        $game_system.battle_active = 1
      when 1
        $game_system.battle_active = 2
      when 2
        $game_system.battle_active = 3
      end     
      # Œˆ’่ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.decision_se)
      @command_window.active = false
      @command_window.visible = false
      @main_window.active = true
      @main_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒŒ[ƒ€XV (ƒJƒƒ‰ุ‚่‘ึ‚ฆƒEƒBƒ“ƒhƒE‚ชƒAƒNƒeƒBƒu‚ฬ๊‡)
  #--------------------------------------------------------------------------
  def update_camera
    # B ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::B)
      # ƒLƒƒƒ“ƒZƒ‹ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.cancel_se)
      @camera_window.active = false
      @camera_window.visible = false
      @main_window.active = true
      return
    end
    # C ƒ{ƒ^ƒ“‚ช‰Ÿ‚ณ‚๊‚ฝ๊‡
    if Input.trigger?(Input::C)
      # ƒCƒ“ƒfƒbƒNƒX‚๐Žๆ“พ‚ต‚ฤ‘ใ“
      case @camera_window.index
      when 0
        $game_system.battle_camera = true
      when 1
        $game_system.battle_camera = false
      end     
      # Œˆ’่ SE ‚๐‰‰‘t
      $game_system.se_play($data_system.decision_se)
      @camera_window.active = false
      @camera_window.visible = false
      @main_window.active = true
      @main_window.refresh
      return
    end
  end
end

#==============================================================================
# ˆศ‰บAŽ•Žิ‚ฬ้EƒVƒ‡ƒE—lป์‚ฬRTAB•”•ช ver 1.07 Œป

#==============================================================================
# ก Scene_Battle
#==============================================================================

class Scene_Battle 
  #--------------------------------------------------------------------------
  # œ ATBŠ๎‘bƒZƒbƒgƒAƒbƒv
  #--------------------------------------------------------------------------
  def atb_setup
    # ATB‰Š๚‰ป
    # speed  : ƒoƒgƒ‹ƒXƒs[ƒhŒˆ’่B’l‚ชฌ‚ณ‚ข‚ู‚ว‘‚ข
    # @active : ƒAƒNƒeƒBƒu“x’่
    #          3 : ํ‚ษƒAƒNƒeƒBƒu๓‘ิ
    #          2 : ƒXƒLƒ‹EƒAƒCƒeƒ€‘I‘๐’†‚ฬ‚ƒAƒNƒeƒBƒuƒQ[ƒW‚ชŽ~‚‚้
    #          1 : 2‚ฬ๓‘ิ‚ษ‰ม‚ฆAƒ^[ƒQƒbƒg‘I‘๐Žž‚เƒEƒFƒCƒg‚ชŠ|‚ฉ‚้
    #          0 : 1‚ฬ๓‘ิ‚ษ‰ม‚ฆAƒRƒ}ƒ“ƒh“—อŽž‚ษ‚เƒEƒFƒCƒg‚ชŠ|‚ฉ‚้
    # @action : ‘ผl‚ชs“ฎ’†‚ษŽฉ•ช‚เs“ฎ‚๐‹N‚ฑ‚ท‚ฑ‚ฦ‚๐‹–‚ท‚ฉ
    #          3 : Žฉ•ช‚ชs“ฎ•s”\‚ล‚ศ‚ขŒภ‚่Œภ‚่‹–‚ท
    #          2 : Žฉ•ช‚ชƒ_ƒ[ƒW‚๐Ž๓‚ฏ‚ฤ‚ข‚ศ‚ขŒภ‚่‹–‚ท
    #          1 : 2‚ฬ๓‘ิ‚ษ‰ม‚ฆAƒ^[ƒQƒbƒg‚ชs“ฎ‚ต‚ฤ‚ข‚ศ‚ขŒภ‚่‹–‚ท
    #          0 : s“ฎ‚๐‹–‚ณ‚ศ‚ขB‡”ิ‚ษs“ฎ‚ตI‚ฆ‚้‚‚ล‘า‚ย
    # @anime_wait : true‚ษ‚ท‚้‚ฦƒoƒgƒ‹ƒAƒjƒEƒ_ƒ[ƒW•\Žฆ’†‚อƒEƒFƒCƒg‚ชŠ|‚ฉ‚้
    # @damage_wait : ƒ_ƒ[ƒW•\Žฆ‘า‚ฟŽžŠิi’Pˆส‚อƒtƒŒ[ƒ€j
    # @enemy_speed : “G‚ฬŽvl‘ฌ“xB1‚ศ‚็‘ฆŽžs“ฎB
    #                1ƒtƒŒ[ƒ€–ˆ‚ษA1/@enemy_speed‚ฬŠm—ฆ‚ลs“ฎ‚๐‹N‚ฑ‚ท
    # @force : ‹ญงƒAƒNƒVƒ‡ƒ“‚ลƒXƒLƒ‹Žg—pŽž‚ฬ‹ญง‹๏‡
    #          2:ƒXƒLƒ‹‚อ‘S‚ฤ‰rฅ‚น‚ธA•K‚ธ‘ฆŽžŽภs
    #          1:’P“ฦƒXƒLƒ‹‚อ‰rฅ‚ตA˜AŒgƒXƒLƒ‹‚ฬ‚‘ฆŽžŽภs
    #          0:‘SƒXƒLƒ‹‰rฅ‚๐s‚ค‚พ‚ฏ
    # ($scene.force = x ‚ฦ‚ท‚้‚ฑ‚ฦ‚ษ‚ๆ‚่A’สํƒCƒxƒ“ƒg‚ฬƒXƒNƒŠƒvƒg‚ฉ‚็•ฯX‰ย”\j
    # @drive : ƒJƒƒ‰‹์“ฎON/OFFBtrue‚ล‹์“ฎONAfalse‚ล‹์“ฎOFF
    # @scroll_time : ƒXƒNƒŠ[ƒ“ˆฺ“ฎ‚ษ—v‚ท‚้Š๎–{ŽžŠิ
    # @zoom_rate = [i, j] : ƒGƒlƒ~[‚ฬƒY[ƒ€—ฆ
    #                      i ‚ช‰ๆ–สลใ•”‚ษ”z’u‚ต‚ฝŽž‚ฬŠg‘ๅ—ฆ
    #                      j ‚ช‰ๆ–สล‰บ•”‚ษ”z’u‚ต‚ฝŽž‚ฬŠg‘ๅ—ฆ
    #                      1 ”{‚ฦ‚ต‚ฝ‚ข‚ฦ‚ซ‚เA1.0 ‚ฦ•K‚ธฌ”‚ล’่‚ท‚้‚ฑ‚ฦ
    speed = $game_system.battle_speed
    @active = $game_system.battle_active
    @action = 2
    @anime_wait = true
    @damage_wait = 10
    @enemy_speed = 40
    @force = 2
    @drive = $game_system.battle_camera
    @scroll_time = 15
    #@zoom_rate = [0.2, 1.0]
    @zoom_rate = [1.0, 1.0]
    @help_time = 40
    @escape == false
    @camera = nil
    @max = 0
    @turn_cnt = 0
    @help_wait = 0
    @action_battlers = []
    @synthe = []
    @spell_p = {}
    @spell_e = {}
    @command_a = false
    @command = []
    @after_wait = [40, 0]
    @party = false
    for battler in $game_party.actors + $game_troop.enemies
      spell_reset(battler)
      battler.at = battler.agi * rand(speed / 2)
      battler.damage_pop = {}
      battler.damage = {}
      battler.damage_sp = {}
      battler.critical = {}
      battler.recover_hp = {}
      battler.recover_sp = {}
      battler.state_p = {}
      battler.state_m = {}
      battler.animation = []
      if battler.is_a?(Game_Actor)
        @max += battler.agi
      end
    end
    @max *= speed
    @max /= $game_party.actors.size
    for battler in $game_party.actors + $game_troop.enemies
      battler.atp = 100 * battler.at / @max
    end
  end
end

วิธีใช้+ลง เหมือนกัน



Credit: Shinryu




avatar
boyhit
Admin
Admin

ชื่อเล่น : เเอล
ความฝัน : ศิลปิน
จำนวนข้อความ : 1130
เครดิต : 3356
วันที่สมัคร : 09/10/2011
คะเเนนน้ำใจ : 11
เพศ : Male อายุ : 19
เหรียญรางวัล :

ดูข้อมูลส่วนตัว http://raccoongame-rpg.thai-forum.net

ขึ้นไปข้างบน Go down

ขึ้นไปข้างบน


 
Permissions in this forum:
คุณไม่สามารถพิมพ์ตอบ