[Script] [RPGXP] Serene Simple Skill Cooldown

sereneserene Posts: 101Registered
edited August 2019 in RPG Maker
Không biết forum còn ai dùng RPG Maker XP như em không nhỉ :-/ , sau 1 thời gian tìm tòi vọc về Ruby, nay ra lò thử 1 script xem như là thực hành, code có lỗi gì mong các senpai chỉ dẫn 3 

[size=large]Giới Thiệu[/size]Thêm cooldown cho skill (skill tạm thời không sử dụng được trong vài turn sau khi sử dụng, good for turn-based battle system)

[size=large]Script:[/size][php]#==============================================================================
# [XP] Simple Skill Cooldown
#
# Allows you to add Cooldown to skills
# Author: Serene (just a simple script, no require credit)
#
# Works fine for both actor and enemy
#
# Script call:
# $game_party.actors[Actor ID].get_cooldown(Skill ID)
# $game_party.actors[Actor ID].set_cooldown(Skill ID, Value)
# $game_party.actors[Actor ID].increase_cooldown(Skill ID, Value)
# $game_party.actors[Actor ID].decrease_cooldown(Skill ID, Value)
#
# This script is just a simple idea when I realized we can rely on existing
# methods to make your project more differences
# Feel free to develop/customize/add more features to it
#==============================================================================

class Game_Battler
  

    alias skill_cooldown_init initialize
    alias skill_cooldown_use? skill_can_use?
    alias skill_cooldown_reset remove_states_battle
    alias skill_cooldown_auto remove_states_auto
    alias skill_cooldown_effect skill_effect
  end
  
  # List of Skill IDs that will reset the Cooldown after the end of battle
  COOLDOWN_BATTLE_END = [1, 2, 3]
    
  #
  # * Initialize
  #
  def initialize
    skill_cooldown_init
    @skills_turn = {}
    @skills_turn.default = -1
  end
  #
  # * Set Cooldown
  #
  def set_cooldown(skill_id, value)
    value = -1 if (value < -1)
    @skills_turn[skill_id] = value
  end
  #
  # * Get Cooldown
  #
  def get_cooldown(skill_id)
    return @skills_turn[skill_id]
  end
  #
  # * Increase Cooldown
  #
  def increase_cooldown(skill_id, value=1)
    cooldown = @skills_turn[skill_id]
    @skills_turn[skill_id] = [cooldown + value, -1].max
  end
  #
  # * Decrease Cooldown
  #
  def decrease_cooldown(skill_id, value=1)
    cooldown = @skills_turn[skill_id]
    @skills_turn[skill_id] = [cooldown - value, -1].max
  end
  #
  # * Preventing using a skill if it has Cooldown
  #
  def skill_can_use?(skill_id)
    return false if @skills_turn[skill_id] > -1
    return skill_cooldown_use?(skill_id)
  end
  #
  # * Reset Skill's Cooldown at the end of battle
  #
  def remove_states_battle
    skill_cooldown_reset
    for i in @skills_turn.keys.clone
      if COOLDOWN_BATTLE_END.include?(i)
        @skills_turn = -1
      end
    end
  end
  #

  # * Decrease Cooldown each turn
  #
  def remove_states_auto
    skill_cooldown_auto
    for i in @skills_turn.keys.clone
      self.decrease_cooldown(i)
    end
  end
  #
  # * Apply Cooldown for Skill
  #
  def skill_effect(user, skill)
    effective = skill_cooldown_effect(user, skill)
    skill_id = skill.id
    # config Cooldown for Skills here
    case skill_id
    when 1 # Skill ID
      user.set_cooldown(1, 3) # (Skill ID, number of turns in battle)
      # or can use user.increase_cooldown(1, 3)
      # (when Skill 1 is used, Skill 2 also cooldowns)
      user.set_cooldown(2, 3) if @skills_turn[2] == -1
    # Also can use "else statement" to set default Cooldown for other Skills
    # else
    #   user.set_cooldown(skill_id, 1) # every skills have Cooldown 1 turn by default
    end
    #
    return effective
  end
end[/php]

[size=large]Hướng Dẫn:[/size]Đặt script này dưới tất cả, nhưng trên main.
Hướng dẫn trong script.

[size=large]Điều Khoản[/size]Thoải mái

[size=large]Tác Giả Script[/size]Serene

[size=large]Nguồn[/size]taotrochoi.com

Comments

  • Mộc ChâuMộc Châu Posts: 344Registered
    tôi tuy giờ không còn dùng XP nhưng vẫn nhớ về thời ấy, thời bố mới mua cho chiếc máy tính để bàn, màn hình thì dày cộp, case máy thì to khủng bố. Tôi bắt đầu chập chững vọc vặt máy, từ cái nhỏ nhặt nhất. Đầu tiên là tắt mở máy rồi cài chương trình. Hồi xưa đâu biết muốn dùng chương trình thì phải cài đâu, thế là ra quán cop các icon game vào usb, sau đó mang về cop vào máy. Bật icon đương nhiên là không được rồi, tôi cứ nghĩ là máy bị lỗi liền đi hỏi ông anh hàng xóm, ông ấy chỉ cho tôi là phải cài đặt thì mới chơi được. Tôi bắt đầu biết cài đặt chương trình, bắt đầu biết sử dụng các phần mềm và trên hết mục đích có máy tính của tôi là chơi game. Tiếp đến là những tháng ngày với word và excel do ở trường dạy. Đến bây giờ tôi vẫn nhớ về cái ngày đầu tiên ấy, cái ngày đào vàng xuyên đêm, chơi line 98. Cảm ơn window XP đã cho tôi những trải nghiệm đầu tiên về sử dụng máy tính.

    Script của bạn rất hay, cố gắng phát huy nhé !!! :3 :3
  • sereneserene Posts: 101Registered
    Ông thần này spam cái gì thế này, đọc thấy chả liên quan gì luôn :v
  • 0no012340no01234 Posts: 326Registered
    bác này ghê quá, mình mãi vẫn chưa học nổi ruby =((
  • sereneserene Posts: 101Registered
    Cái script trên thật ra là kế thừa từ default script, nên chỉ cần biết chút ý, chủ yếu là về variable, hash, array, conditional branch là làm được, không cần tạo mới cái gì cả, thật ra chỉ cần edit ngay ruột mấy cái class có sẵn là có thể thêm được nhiều chức năng mới, chỉ là dùng alias để tách ra 1 script riêng để nhìn cho sáng sủa dễ nhìn
  • Mộc ChâuMộc Châu Posts: 344Registered
    có tài liệu không bé
  • sereneserene Posts: 101Registered
    Không có tài liệu, nhưng luyện tập căn bản ở đây (cực kì căn bản như abc): https://ruby.github.io/TryRuby/
    Bắt tay vào thực hành+lý thuyết cùng lúc luôn, chỉ cần 30p là có thể biết hết những thứ căn bản, đã đủ để tự tay edit script
  • Mộc ChâuMộc Châu Posts: 344Registered
    cảm ơn bé nha :3
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    Giỏi quá, lâu rồi không đọc ruby, nhìn không hiểu gì luôn
    :D :D :D
Sign In or Register to comment.