| 赞 | 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感谢您的热情解答~ |   
 
 
 
 |