累计送礼: 0 个 累计收礼: 1 个 TA的每日心情 开心 前天 04:10
签到天数: 209 天
连续签到: 2 天
[LV.7]常住居民III
管理员
VIP
7
卡币
22929
OK点
16
推广点
0
同能卷
50
积分 28284
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[enemy.item_id]) end if enemy.weapon_id > 0 treasures.push($data_weapons[enemy.weapon_id]) end if enemy.armor_id > 0 treasures.push($data_armors[enemy.armor_id]) 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[enemy.item_id]) end if enemy.weapon_id > 0 treasures.push($data_weapons[enemy.weapon_id]) end if enemy.armor_id > 0 treasures.push($data_armors[enemy.armor_id]) end end end end end # Treasure is limited to a maximum of 6 items treasures = treasures[0..5] # Obtaining EXP for i in 0...$game_party.actors.size actor = $game_party.actors[i] 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/