Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Vue d'un monstre pour un A-RPG Jeu 29 Mai 2008 - 14:46 | |
| Bonjour je cherche si quelqu'un pourrais touver la fonction de vue du monstre de L'ABS de ce site( je sais que on peut mais je n'ais pas trouver) Voici le script auquel il faudrait ajouter la fonction : - Spoiler:
#=================================== # Vlad ABS #=================================== #-------------------------------------------------------------- # Créditos a Vlad #-------------------------------------------------------------- # Para Crear un Enemigo, coloca las siguientes anotaciones: # Enemy ID - donde ID es la ID del enemigo en la base de datos. # Die X - donde X = 1 o 2 (1 borra el evento de enemigo, 2 pasa al interruptor local 'A') # Follow - Para que el evento siga al personaje automáticamente. #-------------------------------------------------------------- # Configuración General #-------------------------------------------------------------- #-------------------------------------------------------------- # Tecla de Ataque, cambia X por la letra que quieras: Attack_Button = Input::X #-------------------------------------------------------------- # Tecla de Habilidad, cambia Y por la letra que quieras: Skill_Button = {Input::Y => 0} #-------------------------------------------------------------- # Animación cuando el Héroe sube de Nivel: LevelUp_Ani = 40 #-------------------------------------------------------------- # Animación de ataque del enemigo, copia Enemy_atk_ani[2] = 13 # y cambia el 2 por la ID del enemigo, y el 13 por la ID de animación. 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
|
|
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
| Sujet: Re: Vue d'un monstre pour un A-RPG Jeu 29 Mai 2008 - 14:47 | |
| Voici la suite : - Spoiler:
#-------------------------------------------------------------- # 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, "Fallo", 1) bitmap.font.color.set(255, 245, 155) bitmap.draw_text(0, 12, 160, 36, "Fallo", 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, "Crítico", 1) bitmap.font.color.set(255, 245, 155) bitmap.draw_text(0, 5, 160, 20, "Crítico", 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, ["¡Memorizada!"]) @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
#-------------------------------------------------------------- # Fin del ABS #--------------------------------------------------------------
|
|