Mage Lv.11
Age : 29 Inscrit le : 09/04/2008 Messages : 629
| Sujet: RE Dim 8 Mar 2009 - 16:42 | |
| - Code:
-
#=================================== # Vlad ABS #=================================== #-------------------------------------------------------------- # Credits to Vlad # Traduit par nova pour RPG NATION # http://rpgnation.free.fr #-------------------------------------------------------------- # Créer un event, et insérez 3 commentaires: # Enemy ID - L'ID correspond à numéro de l'ennemi dans la base de données. # Die X - where X = 1 or 2 (le 1 efface l'ennemi après l'avoir tué, # le 2 active l'interupteur local A) # Follow - l'event suivra le héros. (optionnel) #-------------------------------------------------------------- # General Configuration #-------------------------------------------------------------- #-------------------------------------------------------------- # bouton d'attaque, ne pas changer: [DEFAULT= A] Attack_Button = Input::X #-------------------------------------------------------------- # bouton de capacité, ne pas changer: [DEFAULT= S] Skill_Button = {Input::Y => 0} #-------------------------------------------------------------- # Animation du niveau supérieur: LevelUp_Ani = 40 #-------------------------------------------------------------- # animation de l'attaque ennemi, copier Enemy_atk_ani[2] = 13 # changer le 2 de l'ID de ennemi, et le 13 pour l'animation. # exepmle: Enemy_atk_ani[25] = 24 Enemy_atk_ani = {} Enemy_atk_ani[1] = 54 #--------------------------------------------------------------
#-------------------------------------------------------------- # 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.animation_id = 1 #L'ID de l'animation qui se produit quand le héros est touché 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("Suivre") == 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 |
|
Mage Lv.11
Age : 29 Inscrit le : 09/04/2008 Messages : 629
| Sujet: Re: [Résolu] Un script a besoin d'aide amis scripteur !!! Dim 8 Mar 2009 - 16:43 | |
| Suite qui est collé au premier : - Code:
-
#-------------------------------------------------------------- # 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, "Esquive", 1) bitmap.font.color.set(255, 245, 155) bitmap.draw_text(0, 12, 160, 36, "Esquive", 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, "Critique", 1) bitmap.font.color.set(255, 245, 155) bitmap.draw_text(0, 5, 160, 20, "Critique", 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, ["Mémorisé"]) @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 #-------------------------------------------------------------- |
|