赞 | 0 |
VIP | 2 |
好人卡 | 0 |
积分 | 1 |
经验 | 45567 |
最后登录 | 2013-12-19 |
在线时间 | 178 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 178 小时
- 注册时间
- 2008-1-20
- 帖子
- 421
|
在下是刚才才知道原来6R已经发了ARPG脚本了…囧……
这个是刚才在外国站中找到的,应该跟之前的不同吧。
但是,要注意的是,这个系统十分简陋,而且没有使用说明(也不是没有,但藏在脚本里去了,细心的话可以找到出来)。呃,楼主看一看吧。
- #=============================================================================
- # Window Hud
- #=============================================================================
- class Window_Hud < Window_Base
- def initialize
- super(0,0,256,96) # 嗯,要原版的話可以將256改回128。
- self.opacity = 0
- self.visible = false
- refresh
- end
- def refresh
- self.contents.clear
- actor = $game_actors[1]
- draw_actor_hp(actor, 64, 0, 96) # 這段我改了X坐標,把那個64改成0就可以了。
- draw_actor_mp(actor, 64, 32, 96) # 這段我改了X坐標,把那個64改成0就可以了。
- draw_actor_face(actor, 0, 0, 64) # 這段是我自己加上的,樓主可以選擇不用。
- end
- def update
- self.visible = true if $game_switches[1] == true # 1=interruptor que activa y desactiva el HUD
- refresh
- end
- end
- class Scene_Map
- alias hud_main main
- alias hud_update update
- alias hud_terminate terminate
- def main
- @hud = Window_Hud.new
- hud_main
- end
- def update
- @hud.update
- hud_update
- end
- def terminate
- @hud.dispose
- end
- end
- #===================================
- # Vlad ABS
- #===================================
- #--------------------------------------------------------------
- # Credits to Vlad
- #--------------------------------------------------------------
- # To create an enemy, make an event with these annotations:
- # Enemy ID - Where ID is the ID number of the enemy in the Database.
- # Die X - where X = 1 or 2 (1, erases the event of the enemy,
- # 2, passes to the local interrupter A)
- # Follow - Makes the event automatically follow the hero.
- #--------------------------------------------------------------
- # General Configuration
- #--------------------------------------------------------------
- #--------------------------------------------------------------
- # Attack Button, Don't Change: [DEFAULT= A]
- Attack_Button = Input::X
- #--------------------------------------------------------------
- # Ability Button, Don't Change: [DEFAULT= S]
- Skill_Button = {Input::Y => 0}
- #--------------------------------------------------------------
- # LevelUP Animation:
- LevelUp_Ani = 40
- #--------------------------------------------------------------
- # Attack Animation, copy Enemy_atk_ani[2] = 13
- # change the 2 to the ID of the enemy, and the 13 to the ID of the animation.
- # Example: Enemy_atk_ani[25] = 24
- Enemy_atk_ani = {}
- Enemy_atk_ani[2] = 13
- #--------------------------------------------------------------
- #--------------------------------------------------------------
- # Game Character
- #--------------------------------------------------------------
- class Game_Character
- attr_accessor :hp
- attr_accessor :mp
- attr_accessor :damage
- attr_accessor :critical
- attr_accessor :wait_ataque
- attr_accessor :die
- alias vlad_abs_gchar_initialize initialize
- def initialize
- @hp = 0
- @mp = 0
- @die = 0
- $skill_for_use = 0
- @wait_ataque = 0
- @damage = nil
- @critical = false
- vlad_abs_gchar_initialize
- end
- def recebe_atk(attacker)
- attacker_status = (attacker.is_a?(Game_Event) ? attacker.enemy_status : $game_actors[1])
- receptor_status = (self.is_a?(Game_Event) ? self.enemy_status : $game_actors[1])
- self.damage = attacker_status.atk - receptor_status.def
- self.damage *= attacker_status.elements_max_rate(attacker_status.element_set)
- self.damage /= 100
- self.damage = 0 if self.damage < 0
- self.critical = (rand(100) < 4)
- self.damage *= 2 if self.critical
- if self.is_a?(Game_Player)
- $game_actors[1].hp -= self.damage
- if $game_actors[1].hp <= 0
- $scene = Scene_Gameover.new
- end
- elsif self.is_a?(Game_Event)
- self.hp -= self.damage
- if self.hp <= 0
- self.animation_id = 88
- $game_actors[1].gain_exp(enemy_status.exp, 1)
- if @die == 1
- self.erase
- elsif @die == 2
- key = [$game_map.map_id, self.id, "A"]
- $game_self_switches[key] = true
- end
- refresh
- end
- end
- end
- def recebe_skl(attacker)
- for key in Skill_Button.keys
- sklid = Skill_Button[key]
- attacker_status = (attacker.is_a?(Game_Event) ? attacker.enemy_status : $game_actors[1])
- receptor_status = (self.is_a?(Game_Event) ? self.enemy_status : $game_actors[1])
- self.damage = $data_skills[sklid].atk_f - receptor_status.def
- self.damage *= attacker_status.elements_max_rate(attacker_status.element_set)
- self.damage /= 100
- self.damage = 0 if self.damage < 0
- self.critical = (rand(100) < 4)
- self.damage *= 2 if self.critical
- attacker_status.mp -= $data_skills[sklid].mp_cost
- if self.is_a?(Game_Player)
- $game_actors[1].hp -= self.damage
- $scene = Scene_Gameover.new if $game_actors[1].hp <= 0
- elsif self.is_a?(Game_Event)
- self.hp -= self.damage
- if self.hp <= 0
- $game_actors[1].gain_exp(enemy_status.exp, 1)
- if @die == 1
- self.erase
- elsif @die == 2
- key = [$game_map.map_id, self.id, "A"]
- $game_self_switches[key] = true
- end
- refresh
- end
- end
- end
- end
- def follow_hero(dx, dy)
- sx = @x - dx
- sy = @y - dy
- if sx == 0 and sy == 0
- return
- end
- abs_sx = sx.abs
- abs_sy = sy.abs
- if abs_sx == 0
- sy > 0 ? move_up : move_down
- if not moving? and sx != 0
- sx > 0 ? move_left : move_right
- end
- return
- elsif abs_sy == 0
- sx > 0 ? move_left : move_right
- if not moving? and sy != 0
- sy > 0 ? move_up : move_down
- end
- return
- end
- if abs_sx == abs_sy
- rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
- end
- if abs_sx > abs_sy
- sx > 0 ? move_left : move_right
- if not moving? and sy != 0
- sy > 0 ? move_up : move_down
- end
- else
- sy > 0 ? move_up : move_down
- if not moving? and sx != 0
- sx > 0 ? move_left : move_right
- end
- end
- end
- def raio(dx, dy)
- ax = (@x - dx) ** 2
- ay = (@y - dy) ** 2
- return Math.sqrt(ax + ay)
- end
- end
- #--------------------------------------------------------------
- # Game Event
- #--------------------------------------------------------------
- class Game_Event < Game_Character
- attr_reader :inimigo
- attr_reader :enemy_status
- alias vlad_abs_gevent_initialize initialize
- alias vlad_abs_gevent_update update
- alias vlad_abs_gevent_refresh refresh
- def initialize(map_id, event)
- @inimigo = false
- @automove = false
- vlad_abs_gevent_initialize(map_id, event)
- end
- def check_com(comentario)
- return false if @list.nil? or @list.size <= 0
- for item in @list
- if item.code == 108 or item.code == 408
- if item.parameters[0].downcase.include?(comentario.downcase)
- return true
- end
- end
- end
- end
- def check_comment(comentario)
- com = comentario.downcase
- return 0 if @list.nil? or @list.size <= 0
- for item in @list
- if item.code == 108 or item.code == 408
- if item.parameters[0].downcase =~ /#{com}[ ]?(\d+)?/
- return $1.to_i
- end
- end
- end
- return 0
- end
- def update
- vlad_abs_gevent_update
- if @inimigo
- new_x = (@x + (@direction == 4 ? -1 : @direction == 6 ? 1 : 0))
- new_y = (@y + (@direction == 8 ? -1 : @direction == 2 ? 1 : 0))
- if self.wait_ataque > 0
- self.wait_ataque -= 1
- elsif $game_player.x == new_x and $game_player.y == new_y
- $game_player.recebe_atk(self)
- $game_player.animation_id = self.enemy_atk_animation_id
- $game_player.jump(0,0)
- self.wait_ataque = 60
- end
- end
- if @automove
- unless moving?
- self.follow_hero($game_player.x, $game_player.y)
- end
- end
- end
- def refresh
- vlad_abs_gevent_refresh
- @inimigo = false
- @enemy_id = check_comment("Enemy")
- @automove = true if check_com("Follow") == true
- @die = check_comment("Die")
- if @enemy_id > 0
- @inimigo = true
- @enemy_status = Game_Enemy.new(@enemy_id, @enemy_id)
- self.hp = @enemy_status.maxhp
- self.mp = @enemy_status.maxmp
- end
- end
- def enemy_atk_animation_id
- if Enemy_atk_ani[@enemy_id]
- return (@enemy_status.nil? ? 0 : Enemy_atk_ani[@enemy_id])
- else
- return (@enemy_status.nil? ? 0 : 1)
- end
- end
- def Enemy_atk_ani
- return Enemy_atk_ani
- end
- end
- #--------------------------------------------------------------
- # Game Player
- #--------------------------------------------------------------
- class Game_Player < Game_Character
- alias vlad_abs_gplayer_update update
- alias vlad_abs_gplayer_refresh refresh
- def update
- vlad_abs_gplayer_update
- if self.wait_ataque > 0
- self.wait_ataque -= 1
- end
- def refresh
- vlad_abs_gplayer_refresh
- self.hp = $game_actors[1].hp
- self.mp = $game_actors[1].mp
- end
- if Input.trigger?(Attack_Button) and self.wait_ataque <= 0
- new_x = (@x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0))
- new_y = (@y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0))
- for event in $game_map.events.values
- if event.inimigo
- if event.x == new_x and event.y == new_y
- event.recebe_atk(self)
- event.animation_id = self.player_atk_animation_id
- event.jump(0,0)
- self.wait_ataque = 30
- break
- end
- end
- end
- end
- for key in Skill_Button.keys
- if Input.trigger?(key) and Skill_Button[key] != nil and Skill_Button[key] != 0 and $game_actors[1].mp >= $data_skills[Skill_Button[key]].mp_cost and self.wait_ataque <= 0
- new_x = (@x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0))
- new_y = (@y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0))
- for event in $game_map.events.values
- if event.inimigo
- if event.x == new_x and event.y == new_y
- event.recebe_skl(self)
- event.animation_id = self.player_skl_animation_id
- event.jump(0,0)
- self.wait_ataque = 60
- break
- end
- end
- end
- end
- end
- def player_atk_animation_id
- return ($game_actors[1].nil? ? 0 : $game_actors[1].atk_animation_id)
- end
- def player_skl_animation_id
- for key in Skill_Button.keys
- sklid = Skill_Button[key]
- return ($game_actors[1].nil? ? 0 : $data_skills[sklid].animation_id)
- end
- end
- def Attack_Button
- return Attack_Button
- end
- def Skill_Button
- return Skill_Button
- end
- end
- end
- #--------------------------------------------------------------
- # Game Actor
- #--------------------------------------------------------------
- class Game_Actor
- alias vlad_abs_change_exp change_exp
- def change_exp(exp, show)
- last_level = @level
- last_skills = skills
- @exp = [[exp, 9999999].min, 0].max
- while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
- level_up
- end
- while @exp < @exp_list[@level]
- level_down
- end
- @hp = [@hp, maxhp].min
- @mp = [@mp, maxmp].min
- if show and @level > last_level
- show_level_up
- end
- vlad_abs_change_exp(exp,show)
- end
- def show_level_up
- $game_player.animation_id = LevelUp_Ani
- $game_actors[1].hp = $game_actors[1].maxhp
- $game_actors[1].mp = $game_actors[1].maxmp
- end
- def LevelUp_Ani
- return LevelUp_Ani
- end
- end
- #--------------------------------------------------------------
- # Sprite Base
- #--------------------------------------------------------------
- class Sprite_Base
- alias animation animation_set_sprites
- def animation_set_sprites(frame)
- cell_data = frame.cell_data
- for i in 0..15
- sprite = @animation_sprites[i]
- next if sprite == nil
- pattern = cell_data[i, 0]
- if pattern == nil or pattern == -1
- sprite.visible = false
- next
- end
- if pattern < 100
- sprite.bitmap = @animation_bitmap1
- else
- sprite.bitmap = @animation_bitmap2
- end
- sprite.visible = true
- sprite.src_rect.set(pattern % 5 * 192,
- pattern % 100 / 5 * 192, 192, 192)
- if @animation_mirror
- sprite.x = @animation_ox - cell_data[i, 1] / 2
- sprite.y = @animation_oy - cell_data[i, 2] / 2
- sprite.angle = (360 - cell_data[i, 4])
- sprite.mirror = (cell_data[i, 5] == 0)
- else
- sprite.x = @animation_ox + cell_data[i, 1] / 2
- sprite.y = @animation_oy + cell_data[i, 2] / 2
- sprite.angle = cell_data[i, 4]
- sprite.mirror = (cell_data[i, 5] == 1)
- end
- sprite.z = self.z + 300
- sprite.ox = 96
- sprite.oy = 96
- sprite.zoom_x = cell_data[i, 3] / 200.0
- sprite.zoom_y = cell_data[i, 3] / 200.0
- sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
- sprite.blend_type = cell_data[i, 7]
- end
- end
- end
- #--------------------------------------------------------------
- # Sprite Character
- #--------------------------------------------------------------
- class Sprite_Character < Sprite_Base
- alias vlad_abs_spchar_update update
- def initialize(viewport, character = nil)
- super(viewport)
- @character = character
- @balloon_duration = 0
- @_damage_duration = 0
- update
- end
- def update
- super
- if @_damage_duration > 0
- @_damage_duration -=1
- @_damage_sprite.x = self.x
- if @_damage_duration <= 0
- dispose_damage
- end
- end
- if @character != nil and @character.damage != nil
- damage(@character.damage, @character.critical)
- @character.damage = nil
- @character.critical = false
- end
- vlad_abs_spchar_update
- end
- def damage(value, critical)
- dispose_damage
- if value.is_a?(Numeric)
- damage_string = value.abs.to_s
- else
- damage_string = value.to_s
- end
- bitmap = Bitmap.new(160, 48)
- bitmap.font.name = "Georgia"
- bitmap.font.size = 22
- bitmap.font.italic = true
- if value.is_a?(Numeric) and value <= 0
- bitmap.font.color.set(0, 0, 0)
- bitmap.draw_text(1, 13, 160, 36, "Miss", 1)
- bitmap.font.color.set(255, 245, 155)
- bitmap.draw_text(0, 12, 160, 36, "Miss", 1)
- else
- bitmap.font.color.set(0, 0, 0)
- bitmap.draw_text(1, 13, 160, 36, damage_string, 1)
- bitmap.font.color.set(255, 255, 255)
- bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
- end
- if critical
- bitmap.font.color.set(0, 0, 0)
- bitmap.draw_text(1, 6, 160, 20, "Critical", 1)
- bitmap.font.color.set(255, 245, 155)
- bitmap.draw_text(0, 5, 160, 20, "Critical", 1)
- end
- @_damage_sprite = ::Sprite.new(self.viewport)
- @_damage_sprite.bitmap = bitmap
- @_damage_sprite.ox = 80
- @_damage_sprite.oy = 20
- @_damage_sprite.x = self.x
- @_damage_sprite.y = self.y - self.oy / 2 - 40
- @_damage_sprite.z += 99999
- @_damage_duration = 30
- end
- def show_text(string, size=16, color=0)
- dispose_damage
- damage_string = string
- if string.is_a?(Array)
- array = true
- else
- array = false
- end
- bitmap = Bitmap.new(160, 48)
- bitmap.font.name = "Georgia"
- bitmap.font.size = size
- bitmap.font.italic = true
- if array
- for i in 0..string.size
- next if damage_string[i] == nil
- bitmap.font.color.set(96, 96-20, 0) if color == 0
- bitmap.font.color.set(0, 0, 0) if color != 0
- bitmap.draw_text(-1, (12+(16*i)-1)-16, 160, 36, damage_string[i], 1)
- bitmap.draw_text(+1, (12+(16*i)-1)-16, 160, 36, damage_string[i], 1)
- bitmap.draw_text(-1, (12+(16*i)+1)-16, 160, 36, damage_string[i], 1)
- bitmap.draw_text(+1, (12+(16*i)+1)-16, 160, 36, damage_string[i], 1)
- bitmap.font.color.set(255, 245, 155) if color == 0
- bitmap.font.color.set(144, 199, 150) if color == 1
- bitmap.font.color.set(197, 147, 190)if color == 2
- bitmap.font.color.set(138, 204, 198)if color == 3
- bitmap.draw_text(0, (12+(16*i))-16, 160, 36, damage_string[i], 1)
- end
- else
- bitmap.font.color.set(96, 96-20, 0) if color == 0
- bitmap.font.color.set(0, 0, 0) if color != 0
- bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
- bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
- bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
- bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
- bitmap.font.color.set(255, 245, 155) if color == 0
- bitmap.font.color.set(144, 199, 150) if color == 1
- bitmap.font.color.set(197, 147, 190)if color == 2
- bitmap.font.color.set(138, 204, 198)if color == 3
- bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
- end
- @_damage_sprite = ::Sprite.new(self.viewport)
- @_damage_sprite.bitmap = bitmap
- @_damage_sprite.ox = 80
- @_damage_sprite.oy = 20
- @_damage_sprite.x = self.x
- @_damage_sprite.y = self.y - self.oy / 2
- @_damage_sprite.z = 3000
- @_damage_duration = 30
- end
- def dispose_damage
- if @_damage_sprite != nil
- @_damage_sprite.dispose
- @_damage_sprite = nil
- end
- end
- end
- #--------------------------------------------------------------
- # Window Skill
- #--------------------------------------------------------------
- class Scene_Skill
- alias vlad_abs_sskill_initialize initialize
- alias vlad_abs_sskill_update update
- def initialize(actor_index = 0, equip_index = 0)
- @memory = Window_Command.new(150, ["Memorize"])
- @memory.active = false
- @memory.visible = false
- @memory.x = (544 - @memory.width) / 2
- @memory.y = (416 - @memory.height) / 2
- @memory.z = 1500
- vlad_abs_sskill_initialize
- end
- def update
- update_skill
- @memory.update if @memory.active
- return update_memory if @memory.active
- vlad_abs_sskill_update
- end
- def update_skill
- for key in Skill_Button.keys
- if Input.trigger?(key)
- Sound.play_decision
- Skill_Button[key] = @skill_window.skill.id
- @memory.active = @memory.visible = true
- @skill_window.active = false
- end
- end
- end
- def update_memory
- if Input.trigger?(Input::C)
- Sound.play_decision
- @memory.active = @memory.visible = false
- @skill_window.active = true
- end
- end
- def Skill_Button
- return Skill_Button
- end
- end
- #--------------------------------------------------------------
- # FINISH
- #--------------------------------------------------------------
复制代码 系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~ |
|