[VX] Poison based on current HP

Thảo luận trong 'Game Development' bắt đầu bởi Zell Dinch, 7/7/09.

  1. Zell Dinch

    Zell Dinch Gloria in excelsis Deo Lão Làng GVN

    Tham gia ngày:
    18/7/03
    Bài viết:
    2,312
    Nếu sử dụng script ATB, bạn sẽ thấy các skill poison quá imba do thực hiện sát thương dựa trên HP Max. Nếu ko sử dụng Sideview Battler, mọi chuyện sẽ dễ dàng hơn rất nhiều nên mình ko nói tới. Mình viết script này để tạo một state giống như Poison nhưng sát thương dựa trên HP hiện có.

    Đầu tiên tạo một state mới, đặt tên tùy ý, nhớ đừng check vào Slip Damage

    Trong script *SBS Configurations
    Tìm
    Mã:
    return ["SLIPDAMAGE"]
    Bên dưới thêm vào
    Mã:
    when 22 # Slip Damage based on Current HP
          return ["SLIPDAMAGCHP"]
    Tìm
    Mã:
    return [["hp", 0, 10, true, true]]
    Bên dưới thêm vào
    Mã:
    when 22  # Poison
          return [["hp", 0, 10, true, true]]
    Nhớ sửa số 22 thành ID state bạn đã tạo.

    Sau đó tạo script có nội dung như sau ngay dưới script *Sideview 2

    Mã:
    #==============================================================================
    # ■ Poison Edited Addon by Zell Dinch
    # 07.01.2009
    #------------------------------------------------------------------------------
    class Scene_Battle < Scene_Base
     alias turn_end_poison turn_end
      def turn_end
        for member in $game_party.members + $game_troop.members
          member.clear_action_results
          next unless member.exist?
          actor = member.actor?
          current_damage = 0
          for state in member.states
            next unless state.extension.include?("SLIPDAMAGCHP")
            for ext in state.slip_extension
              if ext[0] == "hp"
                base_damage = ext[1] + member.hp * ext[2] / 100
                current_damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
                slip_pop = ext[3]
                slip_dead = ext[4]
                slip_damage_flug = true
              end
            end  
          end
          current_damage = member.hp - 1 if current_damage >= member.hp && slip_dead = false
          member.hp -= current_damage
          @spriteset.set_damage_pop(actor, member.index, current_damage) if slip_pop
          member.perform_collapse if member.dead?
          member.clear_action_results
        end
        @status_window.refresh
        wait(55) if slip_damage_flug
        slip_damage_flug = false
        turn_end_poison
      end
    end
     

Chia sẻ trang này