じ☆ve冰风 发表于 2026-7-12 15:25:02

Incapacitate States XP

Incapacitate States XP

by

Gidan90​

This script allows setup states that makes the character to be set as dead even if not actually dead, an example is a petrification state.

Features
- If all party members are hit by this state, it’s game over.
- If all enemies are hit by this state the battle ends, and you not receive any experience points, items or money.
v. 1.0.1
- You can choose if obtain or not exp and gil when all foes are incapacitated.
- You can choose if change or not battler color when incapacitated.


How to Use
Copy the script into the script editor below the default scripts but above Main. Follow the instructions and configuration guidance within the script itself.


Script
Spoiler: Script                 Ruby:        
#-------------------------------------------------------------------------------
# Gidan90 - Incapacitate States XP
#-------------------------------------------------------------------------------
# Description:
# This script allows setup states that makes the character to be set as dead
# even if not actually dead, an example is a petrification state.
# Features:
# v. 1.0.0
# - If all party members are hit by this state, it’s game over.
# - If all enemies are hit by this state the battle ends, and
#   you not receive any experience points, items or money.
# - Enemy or party members color tone changed when incapacitated
#   status is applied.
# v. 1.0.1
# - Aliased Sprite_Battler method for more compatibilities.
# - You can choose if obtain or not exp and gil when all foes are incapacitated.
# - You can choose if change or not battler color when incapacitated.
#-------------------------------------------------------------------------------
# * This script was made with the default battle system in mind. Custom battle
#   scripts will most likely not work with this script without edits.
# * Changes made to Game_Party, Game_Troop, Game_Battler, Scene_Battle
#   and Sprite_Battler.
#-------------------------------------------------------------------------------

module Gidan
module IncapacitateStates
    # ID from database of incapacitate states.
    PETRIFY_STATE = 18# Petrify State.
    #CUSTOM_STATE = 19# Rename it and add your custom state to line 90 and 268.
   
    # Option (TRUE/FALSE)
    OBT_EXP = false # Set true to obtain exp and gil when all foes are incapacitated.
    INC_TONE = true # Set false if you don't want to change battler color tone when incapacitated.
end
end

class Game_Party
#--------------------------------------------------------------------------
# * Get Array of Living Members
#--------------------------------------------------------------------------
def alive_members
    @actors.select{|member| member.alive?}
end
#--------------------------------------------------------------------------
# * Determine Everyone is Incapacitated
#--------------------------------------------------------------------------
def all_incapacitate?
    # If an actor is in the party not incapacitate
    for actor in self.alive_members
      unless actor.incapacitate?
      # End Method
      return false
      end
    end
    # All members incapacitate
    return true
end
end

class Game_Troop
#--------------------------------------------------------------------------
# * Get Array of Living Members
#--------------------------------------------------------------------------
def alive_members
    @enemies.select{|member| member.alive?}
end
#--------------------------------------------------------------------------
# * Determine Everyone is Incapacitated
#--------------------------------------------------------------------------
def all_incapacitate?
    # If an enemy is in the party not incapacitate
    for enemy in self.alive_members
      unless enemy.incapacitate?
      # End Method
      return false
      end
    end
    # All members incapacitate
    return true
end
end

class Game_Battler
include Gidan::IncapacitateStates
#--------------------------------------------------------------------------
# * Get State ID of Incapacitate
#--------------------------------------------------------------------------
def incapacitate_state?
    state?(PETRIFY_STATE) # or
    #state?(CUSTOM_STATE) # Add here your custom states.
end
#--------------------------------------------------------------------------
# * Check Incapacitate State
#--------------------------------------------------------------------------
def incapacitate?
    return (incapacitate_state?)
end
#--------------------------------------------------------------------------
# * Get State ID of K.O.
#--------------------------------------------------------------------------
def death_state?
    state?(1)
end
#--------------------------------------------------------------------------
# * Determine Survival
#--------------------------------------------------------------------------
def alive?
    return (not @hidden and !death_state?)
end
#--------------------------------------------------------------------------
# * Add State
#   state_id : state ID
#   force    : forcefully added flag (used to deal with auto state)
#--------------------------------------------------------------------------
alias incapacitate_add_state add_state
def add_state(state_id, force = false)
      # If incapacitate
      if incapacitate? and !dead?
      # End Method
      return
      end
    incapacitate_add_state(state_id, force = false)
end
end

class Scene_Battle
include Gidan::IncapacitateStates
#--------------------------------------------------------------------------
# * Determine Battle Win/Loss Results
#--------------------------------------------------------------------------
def judge
    # If all dead determinant is true, if all incapacitate determinant is true
    # or number of members in party is 0
    if $game_party.all_dead? or $game_party.all_incapacitate? or $game_party.actors.size == 0
      # If possible to lose
      if $game_temp.battle_can_lose
      # Return to BGM before battle starts
      $game_system.bgm_play($game_temp.map_bgm)
      # Battle ends
      battle_end(2)
      # Return true
      return true
      end
      # Set game over flag
      $game_temp.gameover = true
      # Return true
      return true
    end
    # Return false if even all enemies are incapacitated
    if $game_troop.all_incapacitate?
      start_phase5
      return true
    end
    # Return false if even 1 enemy exists
    for enemy in $game_troop.enemies
      if enemy.exist?
      return false
      end
    end
    # Start after battle phase (win)
    start_phase5
    # Return true
    return true
end
#--------------------------------------------------------------------------
# * Start After Battle Phase
#--------------------------------------------------------------------------
def start_phase5
    # Shift to phase 5
    @phase = 5
    # Play battle end ME
    $game_system.me_play($game_system.battle_end_me)
    # Return to BGM before battle started
    $game_system.bgm_play($game_temp.map_bgm)
    # Initialize EXP, amount of gold, and treasure
    exp = 0
    gold = 0
    treasures = []
    # Loop
    for enemy in $game_troop.enemies
      # If EXP_RECEIVE is true
      if OBT_EXP
      # If enemy is not hidden
      unless enemy.hidden
          # Add EXP and amount of gold obtained
          exp += enemy.exp
          gold += enemy.gold
          # Determine if treasure appears
          if rand(100) < enemy.treasure_prob
            if enemy.item_id > 0
            treasures.push($data_items)
            end
            if enemy.weapon_id > 0
            treasures.push($data_weapons)
            end
            if enemy.armor_id > 0
            treasures.push($data_armors)
            end
          end
      end
      else
      # If enemy is not hidden or incapacitate
      unless enemy.hidden or enemy.incapacitate?
          # Add EXP and amount of gold obtained
          exp += enemy.exp
          gold += enemy.gold
          # Determine if treasure appears
          if rand(100) < enemy.treasure_prob
            if enemy.item_id > 0
            treasures.push($data_items)
            end
            if enemy.weapon_id > 0
            treasures.push($data_weapons)
            end
            if enemy.armor_id > 0
            treasures.push($data_armors)
            end
          end
      end
      end
    end
    # Treasure is limited to a maximum of 6 items
    treasures = treasures
    # Obtaining EXP
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      if actor.cant_get_exp? == false
      last_level = actor.level
      actor.exp += exp
      if actor.level > last_level
          @status_window.level_up(i)
      end
      end
    end
    # Obtaining gold
    $game_party.gain_gold(gold)
    # Obtaining treasure
    for item in treasures
      case item
      when RPG::Item
      $game_party.gain_item(item.id, 1)
      when RPG::Weapon
      $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
      $game_party.gain_armor(item.id, 1)
      end
    end
    # Make battle result window
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    # Set wait count
    @phase5_wait_count = 100
end
end

class Sprite_Battler < RPG::Sprite
include Gidan::IncapacitateStates
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias tone_change_update update
def update
    tone_change_update
    # If visible
    if @battler_visible and INC_TONE
      # Incapacitate state set color tone
      if @battler.state?(PETRIFY_STATE) and @battler.damage == nil
      self.tone.set(0, 0, 0, 255)
      #elsif @battler.state?(CUSTOM_STATE) and @battler.damage == nil
      #self.tone.set(0, 80, 255, 0) #self.tone.set(0, 0, 0, 255)
      else
      self.tone.set(0, 0, 0, 0) unless @battler.incapacitate?
      end
    end
end
end


Demo
DEMO

Credits and Thanks
- Kyonides for exp suggestion

License
You can use it for both commercial and non-commercial games!


本贴来自国际rpgmaker官方论坛作者:Gidan90处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/incapacitate-states-xp.144835/
页: [1]
查看完整版本: Incapacitate States XP