Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # ** โจมตีแล้วติดอาการจากอีกฝ่ายได้
- #------------------------------------------------------------------------------
- # * โดย: jojo741963
- # * ขอบคุณเป็นพิเศษ : Alphaforce
- # * เวอร์ชั่น: 1.1
- # 3-1-2015
- #------------------------------------------------------------------------------
- # รายละเอียดของสคริปต์นี้ :
- # - เมื่อฮีโร่ หรือ มอน ถูกโจมตี ทั้งโดยสกิลและโจมตีปกติ จะสามารถเพิ่มอาการให้แก่ผู้โจมตีได้
- # โดยจะไม่มีผลกับพวกเดียวกันเอง (เช่นสกิลทำร้ายตัวเอง หรือทำร้ายพวกเดียวกันเอง) แต่ก็ปรับแต่งได้ด้านล่างของสคริปต์
- # - การเพิ่มอาการจะคิดค่าตามเปอร์เซ็นที่กำหนด (มากกว่า 0 และไม่เกิน 100)
- # - สามารถกำหนดเพิ่มเติมได้ว่าอาการที่จะเกิดแก่ผู้โจมตีนั้น จะเกิดขึ้นกับผู้โจมตีไอดีใดบ้าง
- # - การติดอาการนี้ มีค่าตายตัวอยู่กับสคริปต์ ผลจากสคริปต์
- # - สามารถกำหนดไอดีของอาวุธระยะไกล (โจมตีแบบไม่ประชิดตัว) ได้ เพื่อที่เมื่อโจมตีจะไม่เกิดอาการ
- # เช่น ปืน ธนู ผาหน้าไม้
- # - ถ้าเป็นสกิลที่ไม่ได้ประชิดตัว(สกิลเวทย์) ผู้โจมตีจะไม่ติดอาการจากอีกฝ่าย
- # (กรณีทำสกิลยิงปืน ยิงธนู หรือสกิลอื่นๆ ให้ตั้ง ป้องกันเวทย์:Mdef ให้เป็น 1 )
- #------------------------------------------------------------------------------
- # วิธีการใช้งานสคริปต์นี้ :
- # วางสคริปต์นี้เหนือสคริปต์ Main และใต้สคริปต์ Scene_Debug
- # แล้วเซ็ตค่าได้ด่านล่างเลยครับ
- #==============================================================================
- module STATE_EFFECT
- #------------------------------------------------------------------------------
- # ** กำหนดสวิตช์ให้ระบบนี้ทำงาน
- #------------------------------------------------------------------------------
- Switch = false
- # ต้องการให้ใช้สวิตช์ควบคุมการทำงานของสคริปต์หรือไม่
- # ดั้งเดิม - false , ถ้ากำหนดให้เป็น true ต้องระบุไอดีของสวิตช์ที่จะควบคุมระบบด้วย
- Switch_id = 1
- #------------------------------------------------------------------------------
- # ** จบการกำหนดสวิตช์ให้ระบบนี้ทำงาน
- #------------------------------------------------------------------------------
- #------------------------------------------------------------------------------
- # ** กำหนดไอดีอาวุธระยะไกล ที่ผู้โจมตีจะไม่ติดอาการ
- # เช่น อาวุธประเภทปืน ธนู ผาหน้าไม้
- #------------------------------------------------------------------------------
- Weapon_id = [ 17 ,18, 19, 20, 21, 22, 23, 24 ]
- #------------------------------------------------------------------------------
- # ** จบการกำหนดไอดีอาวุธระยะไกล ที่ผู้โจมตีจะไม่ติดอาการ
- #------------------------------------------------------------------------------
- State_effect = []
- State_effect[0] = [
- #------------------------------------------------------------------------------
- # ** กำหนดส่วนฮีโร่ถูกโจมตี
- #------------------------------------------------------------------------------
- # กำหนดโดยใช้รูปแบบดังนี้
- # [ไอดีฮีโร่,ไอดีอาการ,โอกาสที่จะเกิดอาการ,กำหนดว่ามอนไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี)] , ...
- # - ไอดีฮีโร่ : ไอดีของฮีโร่
- # - ไอดีอาการ : ไอดีของอาการที่จะให้เกิด
- # - โอกาสที่จะเกิดอาการ : ใส่ได้มากกว่า 0 และไม่เกิน 100
- # - กำหนดว่ามอนไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี) : สามารถกำหนดเพิ่มได้ว่าจะให้เกิดกับมอนไอดีไหนบ้าง
- # **จะกำหนดหรือไม่กำหนดก็ได้
- #------------------------------------------------------------------------------
- # ตัวอย่าง1 :
- # ต้องการกำหนดให้ เมื่อฮีโร่ไอดีที่ 1 ถูกโจมตี แล้วจะมีโอกาสติดพิษแก่ผู้โจมตี 10%
- # (อาการพิษ ไอดี 3)
- # กำหนดดังนี้ : [1,3,10]
- #------------------------------------------------------------------------------
- # ตัวอย่าง2 :
- # ต้องการกำหนดให้ เมื่อฮีโร่ไอดีที่ 7 ถูกโจมตี แล้วจะมีโอกาสติดพิษแก่ผู้โจมตี 50%
- # แต่จะเกิดขึ้นกับผู้โจมตี(มอน)ที่เป็นไอดี 7,8,9 เท่านั้น (อาการพิษ ไอดี 3)
- # กำหนดดังนี้ : [7,3,50,[7,8,9]]
- #------------------------------------------------------------------------------
- [1,3,20] , [2,4,10] , [7,2,80] , [8,5,60]
- #------------------------------------------------------------------------------
- # ** จบการกำหนดส่วนฮีโร่ถูกโจมตี
- #------------------------------------------------------------------------------
- ]
- State_effect[1] = [
- #------------------------------------------------------------------------------
- # ** กำหนดส่วนมอนถูกโจมตี
- #------------------------------------------------------------------------------
- # กำหนดโดยใช้รูปแบบดังนี้
- # [ไอดีมอน,ไอดีอาการ,โอกาสที่จะเกิดอาการ,กำหนดว่าฮีโร่ไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี)] , ...
- # - ไอดีมอน : ไอดีของมอน
- # - ไอดีอาการ : ไอดีของอาการที่จะให้เกิด
- # - โอกาสที่จะเกิดอาการ : ใส่ได้มากกว่า 0 และไม่เกิน 100
- # - กำหนดว่าฮีโร่ไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี) : สามารถกำหนดเพิ่มได้ว่าจะให้เกิดกับฮีโร่ไอดีไหนบ้าง
- # **จะกำหนดหรือไม่กำหนดก็ได้
- #------------------------------------------------------------------------------
- # ตัวอย่าง1 :
- # ต้องการกำหนดให้ เมื่อมอนไอดีที่ 1 ถูกโจมตี แล้วจะมีโอกาสเกิดอัมพาตแก่ผู้โจมตี 35%
- # (อาการอัมพาต ไอดี 8)
- # กำหนดดังนี้ : [1,8,35]
- #------------------------------------------------------------------------------
- # ตัวอย่าง2 :
- # ต้องการกำหนดให้ เมื่อมอนไอดีที่ 8 ถูกโจมตี แล้วจะมีโอกาสเกิดสับสนแก่ผู้โจมตี 40%
- # แต่จะเกิดขึ้นกับผู้โจมตี(ฮีโร่)ที่เป็นไอดี 1,2,8 เท่านั้น (อาการสับสน ไอดี 6)
- # กำหนดดังนี้ : [8,6,40,[1,2,8]]
- #------------------------------------------------------------------------------
- [1,3,50] , [2,4,40,[1,2,7]]
- #------------------------------------------------------------------------------
- # ** จบการกำหนดส่วนมอนถูกโจมตี
- #------------------------------------------------------------------------------
- ]
- end
- class Game_Battler
- #ทุกครั้งที่เรียกใช้ attack_effect จะเพิ่มอาการพิเศษเข้าไป
- alias state_effect_attack_effect attack_effect
- def attack_effect(attacker)
- state_effect_attack_effect(attacker)
- pass = false
- for i in 0..STATE_EFFECT::Weapon_id.size-1
- if attacker.weapon_id == STATE_EFFECT::Weapon_id[i] #เช็คว่าไอดีอาวุธฮีโร่ ตรงกับไอดีที่กำหนดไว้ไหม
- pass = true
- end
- end
- if pass == false
- if ( STATE_EFFECT::Switch && $game_switches[STATE_EFFECT::Switch_id] ) || STATE_EFFECT::Switch == false
- make_state_effect(attacker)
- end
- end
- end
- #ทุกครั้งที่เรียกใช้ skill_effect จะเพิ่มอาการพิเศษเข้าไป
- alias state_effect_skill_effect skill_effect
- def skill_effect(user, skill)
- state_effect_skill_effect(user, skill)
- if skill.mdef_f == 0 #เช็คว่าเป็นสกิลเวทย์หรือไม่
- if ( STATE_EFFECT::Switch && $game_switches[STATE_EFFECT::Switch_id] ) || STATE_EFFECT::Switch == false
- make_state_effect(user)
- end
- end
- end
- #สร้างอาการพิเศษ
- def make_state_effect(attacker)
- if attacker.is_a?(Game_Actor) #เช็คว่าผู้โจมตีเป็นฮีโร่หรือไม่
- #ถ้าใช้ก็เช็คต่อไปว่าเป้าหมายเป็น ฮีโร่ ด้วยกันเองรึเปล่า
- #และหลังเครื่องหมาย # ที่คั่นไว้ นั่นคือไว้เช็คไอดีไว้กันเนื่องจากโจมตีตัวเอง
- #แต่ผมก็ใส่ # ไว้ มันจึงไม่ทำงาน (คงไม่มีใครทำสกิลโจมตีเพื่อนหรือทำร้ายกันเอง)
- #ถ้ามีเอา # ที่คึ่นไว้ด้านล่างออกเลย :v
- #ถ้าเป้าหมายเป็นฮีโร่ เนื่องการการโจมตีกันเอง ไม่จำเป็นต้องเพิ่มอาการ
- #จึงให้ return ย้อนกลับไป
- if self.is_a?(Game_Actor) #&& self.id == attacker.id
- return
- end
- state_effect = STATE_EFFECT::State_effect[1] #กำหนด เซต ของอาการเป้าหมายขึ้นมา (ของมอน)
- else #กรณีผู้โจมตีไม่ใช่ฮีโร่
- #เช็คว่าเป้าหมายเป็นมอนหรือไม่ ถ้าใช่ก็ return ย้อนกลับไป
- # ที่ใส่ # คั่นไว้ด้านล่างอีก ก็ย้อนกลับไปอ่านด้านบนใหม่
- unless self.is_a?(Game_Actor)
- #if self.id == attacker.id
- return
- #end
- end
- state_effect = STATE_EFFECT::State_effect[0] #กำหนด เซต ของอาการเป้าหมายขึ้นมา (ของฮีโร่)
- end
- #ตรวจสอบเซตทั้งหมดที่เรียกขึ้นมา
- for i in 0..state_effect.size-1
- if state_effect[i][0] == self.id #ถ้าตำแหน่งเลขตัวแรก ตรงกับไอดีเป้าหมาย
- #ตรวจสอบว่าได้มีการกำหนดเฉพาะหรือไม่ ว่า ไอดีผู้โจมตีต้องเป็นที่กำหนดไว้ไหม
- #ถ้าใช่ - ก็จะตรวจสอบกัน ว่า ไอดีผู้โจมตี ตรงกับ ที่กำหนดไว้รึเปล่า
- if state_effect[i][3] != nil
- pass = true
- for i2 in 0..state_effect[i][3].size-1
- if state_effect[i][3][i2] == attacker.id
- pass = false
- end
- end
- next if pass
- end
- #คำนวณโอกาสที่จะติดอาการ โดยสุ่มค่าขึ้นมาถึง 100
- success = rand(100) + 1
- if success <= state_effect[i][2] #ถ้าค่าที่สุ่มออกมาน้อยกว่าเปอร์เซ็นที่กำหนดไว้ ก็จะติดอาการ
- attacker.add_state(state_effect[i][1]) #เพิ่มอาการ ตามไอดีนั้นย์
- attacker.damage_pop = true #แสดงดาเมจป็อบอัพ
- attacker.damage = "#{$data_states[state_effect[i][1]].name}" #กำหนดข้อความที่จะแสดง
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement