#============================================================================== # 本脚本来自www.66RPG.com,使用和转载请保留此信息 #============================================================================== # ■ Game_BattleAction #------------------------------------------------------------------------------ # 处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类 # 的内部使用。 #============================================================================== class Game_BattleAction #-------------------------------------------------------------------------- # ● 随机目标 (敌人用) #-------------------------------------------------------------------------- def decide_random_target_for_pet # 效果范围的分支 if for_one_friend_hp0? battler = $game_party.random_target_actor_hp0 elsif for_one_friend? battler = $game_party.random_target_actor else battler = $game_troop.random_target_enemy end # 对像存在的话取得索引、 # 对像不存在的场合下清除行动 if battler != nil @target_index = battler.index else clear end end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ # 处理角色的类。本类在 Game_Actors 类 ($game_actors) # 的内部使用、Game_Party 类请参考 ($game_party) 。 #============================================================================== class Game_Actor < Game_Battler attr_accessor :pet_id # 宠物的敌人ID号 #-------------------------------------------------------------------------- # ● 初始化对像 # actor_id : 角色 ID #-------------------------------------------------------------------------- def initialize(actor_id) super() ######################################################################### @pet_id = 0 ######################################################################### setup(actor_id) end end #============================================================================== # ■ Game_Pet #------------------------------------------------------------------------------ # 处理宠物的类,专用。 #============================================================================== class Game_Pet < Game_Battler #-------------------------------------------------------------------------- # ● 初始化对像 # troop_id : 循环 ID # member_index : 循环成员的索引 #-------------------------------------------------------------------------- def initialize(enemy_id) super() @enemy_id = enemy_id enemy = $data_enemies[@enemy_id] @battler_name = enemy.battler_name @battler_hue = enemy.battler_hue @hp = maxhp @sp = maxsp end #-------------------------------------------------------------------------- # ● 获取敌人 ID #-------------------------------------------------------------------------- def id return @enemy_id end #-------------------------------------------------------------------------- # ● 获取索引 #-------------------------------------------------------------------------- def index return @member_index end #-------------------------------------------------------------------------- # ● 获取名称 #-------------------------------------------------------------------------- def name return $data_enemies[@enemy_id].name end #-------------------------------------------------------------------------- # ● 获取基本 MaxHP #-------------------------------------------------------------------------- def base_maxhp return $data_enemies[@enemy_id].maxhp end #-------------------------------------------------------------------------- # ● 获取基本 MaxSP #-------------------------------------------------------------------------- def base_maxsp return $data_enemies[@enemy_id].maxsp end #-------------------------------------------------------------------------- # ● 获取基本力量 #-------------------------------------------------------------------------- def base_str return $data_enemies[@enemy_id].str end #-------------------------------------------------------------------------- # ● 获取基本灵巧 #-------------------------------------------------------------------------- def base_dex return $data_enemies[@enemy_id].dex end #-------------------------------------------------------------------------- # ● 获取基本速度 #-------------------------------------------------------------------------- def base_agi return $data_enemies[@enemy_id].agi end #-------------------------------------------------------------------------- # ● 获取基本魔力 #-------------------------------------------------------------------------- def base_int return $data_enemies[@enemy_id].int end #-------------------------------------------------------------------------- # ● 获取基本攻击力 #-------------------------------------------------------------------------- def base_atk return $data_enemies[@enemy_id].atk end #-------------------------------------------------------------------------- # ● 获取基本物理防御 #-------------------------------------------------------------------------- def base_pdef return $data_enemies[@enemy_id].pdef end #-------------------------------------------------------------------------- # ● 获取基本魔法防御 #-------------------------------------------------------------------------- def base_mdef return $data_enemies[@enemy_id].mdef end #-------------------------------------------------------------------------- # ● 获取基本回避修正 #-------------------------------------------------------------------------- def base_eva return $data_enemies[@enemy_id].eva end #-------------------------------------------------------------------------- # ● 普通攻击 获取攻击方动画 ID #-------------------------------------------------------------------------- def animation1_id return $data_enemies[@enemy_id].animation1_id end #-------------------------------------------------------------------------- # ● 普通攻击 获取对像方动画 ID #-------------------------------------------------------------------------- def animation2_id return $data_enemies[@enemy_id].animation2_id end #-------------------------------------------------------------------------- # ● 获取属性修正值 # element_id : 属性 ID #-------------------------------------------------------------------------- def element_rate(element_id) # 获取对应属性有效度的数值 table = [0,200,150,100,50,0,-100] result = table[$data_enemies[@enemy_id].element_ranks[element_id]] # 状态能防御本属性的情况下效果减半 for i in @states if $data_states[i].guard_element_set.include?(element_id) result /= 2 end end # 过程结束 return result end #-------------------------------------------------------------------------- # ● 获取属性有效度 #-------------------------------------------------------------------------- def state_ranks return $data_enemies[@enemy_id].state_ranks end #-------------------------------------------------------------------------- # ● 属性防御判定 # state_id : 状态 ID #-------------------------------------------------------------------------- def state_guard?(state_id) return false end #-------------------------------------------------------------------------- # ● 获取普通攻击属性 #-------------------------------------------------------------------------- def element_set return [] end #-------------------------------------------------------------------------- # ● 获取普通攻击的状态变化 (+) #-------------------------------------------------------------------------- def plus_state_set return [] end #-------------------------------------------------------------------------- # ● 获取普通攻击的状态变化 (-) #-------------------------------------------------------------------------- def minus_state_set return [] end #-------------------------------------------------------------------------- # ● 获取行动 #-------------------------------------------------------------------------- def actions return $data_enemies[@enemy_id].actions end #-------------------------------------------------------------------------- # ● 获取 EXP #-------------------------------------------------------------------------- def exp return $data_enemies[@enemy_id].exp end #-------------------------------------------------------------------------- # ● 获取金钱 #-------------------------------------------------------------------------- def gold return $data_enemies[@enemy_id].gold end #-------------------------------------------------------------------------- # ● 获取物品 ID #-------------------------------------------------------------------------- def item_id return $data_enemies[@enemy_id].item_id end #-------------------------------------------------------------------------- # ● 获取武器 ID #-------------------------------------------------------------------------- def weapon_id return $data_enemies[@enemy_id].weapon_id end #-------------------------------------------------------------------------- # ● 获取放具 ID #-------------------------------------------------------------------------- def armor_id return $data_enemies[@enemy_id].armor_id end #-------------------------------------------------------------------------- # ● 获取宝物出现率 #-------------------------------------------------------------------------- def treasure_prob return $data_enemies[@enemy_id].treasure_prob end #-------------------------------------------------------------------------- # ● 逃跑 #-------------------------------------------------------------------------- def escape # 设置击中标志 @hidden = true # 清除当前行动 self.current_action.clear end #-------------------------------------------------------------------------- # ● 变身 # enemy_id : 变身为的敌人 ID #-------------------------------------------------------------------------- def transform(enemy_id) # 更改敌人 ID @enemy_id = enemy_id # 更改战斗图形 @battler_name = $data_enemies[@enemy_id].battler_name @battler_hue = $data_enemies[@enemy_id].battler_hue # 在生成行动 make_action end #-------------------------------------------------------------------------- # ● 生成行动 #-------------------------------------------------------------------------- def make_action # 清除当前行动 self.current_action.clear # 无法行动的情况 unless self.movable? # 过程结束 return end # 抽取现在有效的行动 available_actions = [] rating_max = 0 for action in self.actions # 确认回合条件 n = $game_temp.battle_turn a = action.condition_turn_a b = action.condition_turn_b if (b == 0 and n != a) or (b > 0 and (n < 1 or n < a or n % b != a % b)) next end # 确认 HP 条件 if self.hp * 100.0 / self.maxhp > action.condition_hp next end # 确认等级条件 if $game_party.max_level < action.condition_level next end # 确认开关条件 switch_id = action.condition_switch_id if switch_id > 0 and $game_switches[switch_id] == false next end # 符合条件 : 添加本行动 available_actions.push(action) if action.rating > rating_max rating_max = action.rating end end # 最大概率值作为 3 合计计算(0 除外) ratings_total = 0 for action in available_actions if action.rating > rating_max - 3 ratings_total += action.rating - (rating_max - 3) end end # 概率合计不为 0 的情况下 if ratings_total > 0 # 生成随机数 value = rand(ratings_total) # 设置对应生成随机数的当前行动 for action in available_actions if action.rating > rating_max - 3 if value < action.rating - (rating_max - 3) self.current_action.kind = action.kind self.current_action.basic = action.basic self.current_action.skill_id = action.skill_id self.current_action.decide_random_target_for_pet return else value -= action.rating - (rating_max - 3) end end end end end end #============================================================================== # ■ Sprite_Pet #—————————————————————————————————————— # 全新定义 #============================================================================== class Sprite_Pet < RPG::Sprite #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_accessor :battler # 战斗者 #-------------------------------------------------------------------------- # ● 初始化对像 # viewport : 显示端口;battler : 战斗者 (Game_Battler) #-------------------------------------------------------------------------- def initialize(viewport, father_id = 0) super(viewport) @father_id = father_id if $game_party.actors[father_id] != nil if $game_party.actors[father_id].pet_id != 0 @battler = Game_Pet.new($game_party.actors[father_id].pet_id) else @battler = nil end end end #-------------------------------------------------------------------------- # ● 释放 #-------------------------------------------------------------------------- def dispose if self.bitmap != nil self.bitmap.dispose end super end #-------------------------------------------------------------------------- # ● 刷新画面 #-------------------------------------------------------------------------- def update super # 战斗者为 nil 的情况下 if @battler == nil self.bitmap = nil loop_animation(nil) return end if self.battler != nil self.bitmap = RPG::Cache.battler(@battler.battler_name, @battler.battler_hue) if @battler.animation_id != 0 animation = $data_animations[@battler.animation_id] animation(animation, @battler.animation_hit) @battler.animation_id = 0 end if $game_party.actors[@father_id].pet_id == 0 self.battler = nil collapse end end # 设置活动块的坐标 self.x = @father_id * 160 + 85 self.y = 400 self.z = 5 self.zoom_x = 0.6 self.zoom_y = 0.6 end end #============================================================================== # ■ Spriteset_Battle #------------------------------------------------------------------------------ # 处理战斗画面的活动块的类。本类在 Scene_Battle 类 # 的内部使用。 #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_reader :viewport1 # 敌人方的显示端口 attr_reader :viewport2 # 角色方的显示端口 #-------------------------------------------------------------------------- # ● 初始化变量 #-------------------------------------------------------------------------- def initialize # 生成显示端口 @viewport1 = Viewport.new(0, 0, 640, 320) @viewport2 = Viewport.new(0, 0, 640, 480) @viewport3 = Viewport.new(0, 0, 640, 480) @viewport4 = Viewport.new(0, 0, 640, 480) @viewport2.z = 101 @viewport3.z = 200 @viewport4.z = 5000 # 生成战斗背景活动块 @battleback_sprite = Sprite.new(@viewport1) # 生成敌人活动块 @enemy_sprites = [] for enemy in $game_troop.enemies.reverse @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy)) end # 生成自己人活动块 @actor_sprites = [] @actor_sprites.push(Sprite_Battler.new(@viewport2)) @actor_sprites.push(Sprite_Battler.new(@viewport2)) @actor_sprites.push(Sprite_Battler.new(@viewport2)) @actor_sprites.push(Sprite_Battler.new(@viewport2)) ########################################################################### $pet_sprites = [] $pet_sprites.push(Sprite_Pet.new(@viewport2,0)) $pet_sprites.push(Sprite_Pet.new(@viewport2,1)) $pet_sprites.push(Sprite_Pet.new(@viewport2,2)) $pet_sprites.push(Sprite_Pet.new(@viewport2,3)) ########################################################################### # 生成天候 @weather = RPG::Weather.new(@viewport1) # 生成图片活动块 @picture_sprites = [] for i in 51..100 @picture_sprites.push(Sprite_Picture.new(@viewport3, $game_screen.pictures[i])) end # 生成计时器块 @timer_sprite = Sprite_Timer.new # 刷新画面 update end #-------------------------------------------------------------------------- # ● 释放 #-------------------------------------------------------------------------- def dispose # 如果战斗背景位图存在的情况下就释放 if @battleback_sprite.bitmap != nil @battleback_sprite.bitmap.dispose end # 释放战斗背景活动块 @battleback_sprite.dispose # 释放敌人活动块、角色活动块 ########################################################################### for sprite in @enemy_sprites + @actor_sprites + $pet_sprites sprite.dispose end ########################################################################### # 释放天候 @weather.dispose # 释放图片活动块 for sprite in @picture_sprites sprite.dispose end # 释放计时器活动块 @timer_sprite.dispose # 释放显示端口 @viewport1.dispose @viewport2.dispose @viewport3.dispose @viewport4.dispose end #-------------------------------------------------------------------------- # ● 显示效果中判定 #-------------------------------------------------------------------------- def effect? # 如果是在显示效果中的话就返回 true for sprite in @enemy_sprites + @actor_sprites return true if sprite.effect? end return false end #-------------------------------------------------------------------------- # ● 刷新画面 #-------------------------------------------------------------------------- def update # 刷新角色的活动块 (对应角色的替换) @actor_sprites[0].battler = $game_party.actors[0] @actor_sprites[1].battler = $game_party.actors[1] @actor_sprites[2].battler = $game_party.actors[2] @actor_sprites[3].battler = $game_party.actors[3] # 战斗背景的文件名与现在情况有差异的情况下 if @battleback_name != $game_temp.battleback_name @battleback_name = $game_temp.battleback_name if @battleback_sprite.bitmap != nil @battleback_sprite.bitmap.dispose end @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name) @battleback_sprite.src_rect.set(0, 0, 640, 320) end # 刷新战斗者的活动块 ########################################################################### for sprite in @enemy_sprites + @actor_sprites + $pet_sprites sprite.update end ########################################################################### # 刷新天气图形 @weather.type = $game_screen.weather_type @weather.max = $game_screen.weather_max @weather.update # 刷新图片活动块 for sprite in @picture_sprites sprite.update end # 刷新计时器活动块 @timer_sprite.update # 设置画面的色调与震动位置 @viewport1.tone = $game_screen.tone @viewport1.ox = $game_screen.shake # 设置画面的闪烁色 @viewport4.color = $game_screen.flash_color # 刷新显示端口 @viewport1.update @viewport2.update @viewport4.update end end #============================================================================== # ■ Window_Base #------------------------------------------------------------------------------ # 游戏中全部窗口的超级类。 #============================================================================== class Window_Base < Window ############################################################################# def draw_actor_pet(actor, x, y)#——绘制宠物图形 if actor.pet_id != 0 bitmap = RPG::Cache.battler($data_enemies[actor.pet_id].battler_name, $data_enemies[actor.pet_id].battler_hue) cw = bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end end ############################################################################# end #============================================================================== # ■ Window_Status #------------------------------------------------------------------------------ # 显示状态画面、完全规格的状态窗口。 #============================================================================== cla |