Advertisement
Guest User

โจมตีแล้วติดอาการจากอีกฝ่ายได้ 1.1 (ใหม่)

a guest
Jan 3rd, 2015
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 15.67 KB | None | 0 0
  1. #==============================================================================
  2. # **  โจมตีแล้วติดอาการจากอีกฝ่ายได้
  3. #------------------------------------------------------------------------------
  4. # * โดย: jojo741963
  5. # * ขอบคุณเป็นพิเศษ : Alphaforce
  6. # * เวอร์ชั่น: 1.1
  7. #    3-1-2015
  8. #------------------------------------------------------------------------------
  9. #  รายละเอียดของสคริปต์นี้  :
  10. #   -  เมื่อฮีโร่ หรือ มอน ถูกโจมตี ทั้งโดยสกิลและโจมตีปกติ จะสามารถเพิ่มอาการให้แก่ผู้โจมตีได้
  11. #      โดยจะไม่มีผลกับพวกเดียวกันเอง (เช่นสกิลทำร้ายตัวเอง หรือทำร้ายพวกเดียวกันเอง) แต่ก็ปรับแต่งได้ด้านล่างของสคริปต์
  12. #   -  การเพิ่มอาการจะคิดค่าตามเปอร์เซ็นที่กำหนด (มากกว่า 0 และไม่เกิน 100)
  13. #   -  สามารถกำหนดเพิ่มเติมได้ว่าอาการที่จะเกิดแก่ผู้โจมตีนั้น จะเกิดขึ้นกับผู้โจมตีไอดีใดบ้าง
  14. #   -  การติดอาการนี้ มีค่าตายตัวอยู่กับสคริปต์ ผลจากสคริปต์
  15. #   -  สามารถกำหนดไอดีของอาวุธระยะไกล (โจมตีแบบไม่ประชิดตัว) ได้ เพื่อที่เมื่อโจมตีจะไม่เกิดอาการ
  16. #       เช่น ปืน ธนู ผาหน้าไม้
  17. #   -  ถ้าเป็นสกิลที่ไม่ได้ประชิดตัว(สกิลเวทย์) ผู้โจมตีจะไม่ติดอาการจากอีกฝ่าย
  18. #       (กรณีทำสกิลยิงปืน ยิงธนู หรือสกิลอื่นๆ ให้ตั้ง ป้องกันเวทย์:Mdef ให้เป็น 1 )
  19. #------------------------------------------------------------------------------
  20. #  วิธีการใช้งานสคริปต์นี้ :
  21. #     วางสคริปต์นี้เหนือสคริปต์ Main และใต้สคริปต์ Scene_Debug
  22. #     แล้วเซ็ตค่าได้ด่านล่างเลยครับ
  23. #==============================================================================
  24.  
  25. module STATE_EFFECT
  26.   #------------------------------------------------------------------------------
  27.   #  ** กำหนดสวิตช์ให้ระบบนี้ทำงาน
  28.   #------------------------------------------------------------------------------
  29.   Switch = false
  30.   # ต้องการให้ใช้สวิตช์ควบคุมการทำงานของสคริปต์หรือไม่
  31.   # ดั้งเดิม - false  ,  ถ้ากำหนดให้เป็น true ต้องระบุไอดีของสวิตช์ที่จะควบคุมระบบด้วย
  32.   Switch_id = 1
  33.  
  34.   #------------------------------------------------------------------------------
  35.   #  ** จบการกำหนดสวิตช์ให้ระบบนี้ทำงาน
  36.   #------------------------------------------------------------------------------
  37.  
  38.   #------------------------------------------------------------------------------
  39.   #  ** กำหนดไอดีอาวุธระยะไกล ที่ผู้โจมตีจะไม่ติดอาการ
  40.   #    เช่น อาวุธประเภทปืน ธนู ผาหน้าไม้
  41.   #------------------------------------------------------------------------------
  42.   Weapon_id = [ 17 ,18, 19, 20, 21, 22, 23, 24 ]
  43.  
  44.   #------------------------------------------------------------------------------
  45.   #  ** จบการกำหนดไอดีอาวุธระยะไกล ที่ผู้โจมตีจะไม่ติดอาการ
  46.   #------------------------------------------------------------------------------
  47.    
  48.   State_effect = []
  49.  
  50.   State_effect[0] = [
  51.   #------------------------------------------------------------------------------
  52.   #  ** กำหนดส่วนฮีโร่ถูกโจมตี
  53.   #------------------------------------------------------------------------------
  54.   #   กำหนดโดยใช้รูปแบบดังนี้
  55.   #  [ไอดีฮีโร่,ไอดีอาการ,โอกาสที่จะเกิดอาการ,กำหนดว่ามอนไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี)] , ...
  56.   #   - ไอดีฮีโร่                                                       : ไอดีของฮีโร่
  57.   #   - ไอดีอาการ                                                   : ไอดีของอาการที่จะให้เกิด
  58.   #   - โอกาสที่จะเกิดอาการ                                   : ใส่ได้มากกว่า 0 และไม่เกิน 100
  59.   #   - กำหนดว่ามอนไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี) : สามารถกำหนดเพิ่มได้ว่าจะให้เกิดกับมอนไอดีไหนบ้าง
  60.   #                 **จะกำหนดหรือไม่กำหนดก็ได้
  61.   #------------------------------------------------------------------------------
  62.   # ตัวอย่าง1 :
  63.   #      ต้องการกำหนดให้ เมื่อฮีโร่ไอดีที่ 1 ถูกโจมตี แล้วจะมีโอกาสติดพิษแก่ผู้โจมตี 10%
  64.   #      (อาการพิษ ไอดี 3)
  65.   #    กำหนดดังนี้ : [1,3,10]
  66.   #------------------------------------------------------------------------------
  67.   # ตัวอย่าง2 :
  68.   #      ต้องการกำหนดให้ เมื่อฮีโร่ไอดีที่ 7 ถูกโจมตี แล้วจะมีโอกาสติดพิษแก่ผู้โจมตี 50%
  69.   #      แต่จะเกิดขึ้นกับผู้โจมตี(มอน)ที่เป็นไอดี 7,8,9 เท่านั้น  (อาการพิษ ไอดี 3)
  70.   #    กำหนดดังนี้ : [7,3,50,[7,8,9]]
  71.   #------------------------------------------------------------------------------
  72.   [1,3,20]  , [2,4,10] , [7,2,80] , [8,5,60]
  73.  
  74.   #------------------------------------------------------------------------------
  75.   #  ** จบการกำหนดส่วนฮีโร่ถูกโจมตี
  76.   #------------------------------------------------------------------------------
  77.   ]
  78.    
  79.   State_effect[1] = [
  80.   #------------------------------------------------------------------------------
  81.   #  ** กำหนดส่วนมอนถูกโจมตี
  82.   #------------------------------------------------------------------------------
  83.   #   กำหนดโดยใช้รูปแบบดังนี้
  84.   #  [ไอดีมอน,ไอดีอาการ,โอกาสที่จะเกิดอาการ,กำหนดว่าฮีโร่ไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี)] , ...
  85.   #   - ไอดีมอน                                                      : ไอดีของมอน
  86.   #   - ไอดีอาการ                                                   : ไอดีของอาการที่จะให้เกิด
  87.   #   - โอกาสที่จะเกิดอาการ                                   : ใส่ได้มากกว่า 0 และไม่เกิน 100
  88.   #   - กำหนดว่าฮีโร่ไอดีไหนบ้างที่ตีแล้วเกิด (ถ้ามี) : สามารถกำหนดเพิ่มได้ว่าจะให้เกิดกับฮีโร่ไอดีไหนบ้าง
  89.   #                 **จะกำหนดหรือไม่กำหนดก็ได้
  90.   #------------------------------------------------------------------------------
  91.   # ตัวอย่าง1 :
  92.   #      ต้องการกำหนดให้ เมื่อมอนไอดีที่ 1 ถูกโจมตี แล้วจะมีโอกาสเกิดอัมพาตแก่ผู้โจมตี 35%
  93.   #      (อาการอัมพาต ไอดี 8)
  94.   #    กำหนดดังนี้ : [1,8,35]
  95.   #------------------------------------------------------------------------------
  96.   # ตัวอย่าง2 :
  97.   #      ต้องการกำหนดให้ เมื่อมอนไอดีที่ 8 ถูกโจมตี แล้วจะมีโอกาสเกิดสับสนแก่ผู้โจมตี 40%
  98.   #      แต่จะเกิดขึ้นกับผู้โจมตี(ฮีโร่)ที่เป็นไอดี 1,2,8 เท่านั้น  (อาการสับสน ไอดี 6)
  99.   #    กำหนดดังนี้ : [8,6,40,[1,2,8]]
  100.   #------------------------------------------------------------------------------
  101.   [1,3,50] , [2,4,40,[1,2,7]]
  102.  
  103.   #------------------------------------------------------------------------------
  104.   #  ** จบการกำหนดส่วนมอนถูกโจมตี
  105.   #------------------------------------------------------------------------------
  106.   ]
  107.  
  108. end
  109.  
  110.  
  111. class Game_Battler
  112.  
  113.   #ทุกครั้งที่เรียกใช้ attack_effect จะเพิ่มอาการพิเศษเข้าไป
  114.   alias state_effect_attack_effect attack_effect
  115.   def attack_effect(attacker)
  116.     state_effect_attack_effect(attacker)
  117.    
  118.     pass = false
  119.     for i in 0..STATE_EFFECT::Weapon_id.size-1
  120.       if attacker.weapon_id == STATE_EFFECT::Weapon_id[i] #เช็คว่าไอดีอาวุธฮีโร่ ตรงกับไอดีที่กำหนดไว้ไหม
  121.         pass = true
  122.       end
  123.     end
  124.    
  125.     if pass == false
  126.       if ( STATE_EFFECT::Switch && $game_switches[STATE_EFFECT::Switch_id] ) || STATE_EFFECT::Switch == false
  127.         make_state_effect(attacker)
  128.       end
  129.     end
  130.    
  131.    
  132.   end
  133.  
  134.   #ทุกครั้งที่เรียกใช้ skill_effect จะเพิ่มอาการพิเศษเข้าไป
  135.   alias state_effect_skill_effect skill_effect
  136.   def skill_effect(user, skill)
  137.     state_effect_skill_effect(user, skill)
  138.     if skill.mdef_f == 0 #เช็คว่าเป็นสกิลเวทย์หรือไม่
  139.       if ( STATE_EFFECT::Switch && $game_switches[STATE_EFFECT::Switch_id] ) || STATE_EFFECT::Switch == false
  140.         make_state_effect(user)
  141.       end
  142.     end
  143.   end
  144.  
  145.   #สร้างอาการพิเศษ
  146.   def make_state_effect(attacker)
  147.    
  148.     if attacker.is_a?(Game_Actor) #เช็คว่าผู้โจมตีเป็นฮีโร่หรือไม่
  149.      
  150.       #ถ้าใช้ก็เช็คต่อไปว่าเป้าหมายเป็น ฮีโร่ ด้วยกันเองรึเปล่า
  151.       #และหลังเครื่องหมาย # ที่คั่นไว้ นั่นคือไว้เช็คไอดีไว้กันเนื่องจากโจมตีตัวเอง
  152.       #แต่ผมก็ใส่ # ไว้ มันจึงไม่ทำงาน (คงไม่มีใครทำสกิลโจมตีเพื่อนหรือทำร้ายกันเอง)
  153.       #ถ้ามีเอา # ที่คึ่นไว้ด้านล่างออกเลย :v
  154.      
  155.       #ถ้าเป้าหมายเป็นฮีโร่ เนื่องการการโจมตีกันเอง ไม่จำเป็นต้องเพิ่มอาการ
  156.       #จึงให้ return ย้อนกลับไป
  157.       if self.is_a?(Game_Actor) #&& self.id == attacker.id
  158.         return
  159.       end
  160.       state_effect = STATE_EFFECT::State_effect[1] #กำหนด เซต ของอาการเป้าหมายขึ้นมา (ของมอน)
  161.    
  162.     else #กรณีผู้โจมตีไม่ใช่ฮีโร่
  163.      
  164.       #เช็คว่าเป้าหมายเป็นมอนหรือไม่ ถ้าใช่ก็ return ย้อนกลับไป
  165.       # ที่ใส่ # คั่นไว้ด้านล่างอีก ก็ย้อนกลับไปอ่านด้านบนใหม่
  166.       unless self.is_a?(Game_Actor)
  167.         #if self.id == attacker.id
  168.           return
  169.         #end
  170.       end
  171.      
  172.       state_effect = STATE_EFFECT::State_effect[0]  #กำหนด เซต ของอาการเป้าหมายขึ้นมา (ของฮีโร่)
  173.     end
  174.    
  175.     #ตรวจสอบเซตทั้งหมดที่เรียกขึ้นมา
  176.     for i in 0..state_effect.size-1
  177.       if state_effect[i][0] == self.id #ถ้าตำแหน่งเลขตัวแรก ตรงกับไอดีเป้าหมาย
  178.        
  179.         #ตรวจสอบว่าได้มีการกำหนดเฉพาะหรือไม่ ว่า ไอดีผู้โจมตีต้องเป็นที่กำหนดไว้ไหม
  180.         #ถ้าใช่ - ก็จะตรวจสอบกัน ว่า ไอดีผู้โจมตี ตรงกับ ที่กำหนดไว้รึเปล่า
  181.         if state_effect[i][3] != nil
  182.           pass = true
  183.           for i2 in 0..state_effect[i][3].size-1
  184.             if state_effect[i][3][i2] == attacker.id
  185.               pass = false
  186.             end
  187.           end
  188.           next if pass
  189.         end
  190.        
  191.         #คำนวณโอกาสที่จะติดอาการ โดยสุ่มค่าขึ้นมาถึง 100
  192.         success = rand(100) + 1
  193.         if success <= state_effect[i][2] #ถ้าค่าที่สุ่มออกมาน้อยกว่าเปอร์เซ็นที่กำหนดไว้ ก็จะติดอาการ
  194.           attacker.add_state(state_effect[i][1]) #เพิ่มอาการ ตามไอดีนั้นย์
  195.           attacker.damage_pop = true #แสดงดาเมจป็อบอัพ
  196.           attacker.damage = "#{$data_states[state_effect[i][1]].name}" #กำหนดข้อความที่จะแสดง
  197.         end
  198.        
  199.       end
  200.     end
  201.        
  202.   end
  203.  
  204.  
  205. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement