- Script d'affichage de la vie, de l'expérience et du mana sur la map. Script de : Vlad, Chronos, Drod et nova pour la traduction
Rendu :
Donc vous êtes sur une carte, vous mémorisez un sort et vous pouvez le lancer ^^.
Lien démo (à voire)
Mais je souhaite dire aussi que si vous avez un monstre qui possède cette capacité :
Cela fera bugguer votre jeu (il n'y aura pas de message d'erreur seulement vous ne pourrez pas bouger après l'avoir attaqué).
Voila, il y a trois script à placer au dessus de Main (le dernier script) :
Le nommer "High Priority" :
Code:
# Anti Lag # Traduit par nova # http://rpgnation.free.fr #============================================================================== module AntiLag SPC = Win32API.new("kernel32", "SetPriorityClass", "pi", "i") @@high_priority = false def self.high_priority ; @@high_priority; end def self.high_priority?; @@high_priority; end def self.high_priority=(valor) return if @@high_priority == valor @@high_priority = valor if @@high_priority SPC.call(-1, 0x80) return end SPC.call(-1, 0x20) end end AntiLag.high_priority = true
Deuxième script (placez-le en dessous du premier et nommez le "HUD").
Code:
#================================= # Window Hud # Traduit par nova # http://rpgnation.free.fr #================================= module CrissaegrimHud #---------------------------------------------------------- # Image du HUD Picture_Base = "HUD-Base"
# Image des compétences Picture_Hot_Skills = "HUD-Skills"
# Image des objets Picture_Hot_Items = "HUD-Items"
# Active ou désactive le HUD # Si = 0, alors le HUD restera affiché OnOff_Hud_Switch = 0 #---------------------------------------------------------- end #---------------------------------------------------------- class Window_CrissaegrimHud < Window_Base def initialize super(-12,-12,190,117) self.opacity = 0 self.visible = false update end def update if CrissaegrimHud::OnOff_Hud_Switch == 0 self.visible = true self.active = true else if $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true self.visible = true self.active = true else self.visible = false self.active = false end end self.contents.clear bitmap = Cache.system(CrissaegrimHud::Picture_Base) self.contents.blt(0, 0, bitmap, Rect.new(0, 0, 148, 85)) refresh end def refresh actor = $game_actors[1] draw_actor_hp(actor, 16, 0, 96) draw_actor_mp(actor, 16, 24, 96) draw_actor_level(actor, 16, 48) show_state(actor, 119, 2) end def show_state(actor, x, y, width = 32) count = 0 for state in actor.states draw_icon(state.icon_index, x, y + 28 * count) count += 1 break if (24 * count > height - 24) end end end #---------------------------------------------------------- class Window_CrissaegrimHud2 < Window_Base def initialize super(40,347,296,80) self.opacity = 0 self.visible = false update end def update if CrissaegrimHud::OnOff_Hud_Switch == 0 self.visible = true self.active = true else if $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true self.visible = true self.active = true else self.visible = false self.active = false end end self.contents.clear bitmap = Cache.system(CrissaegrimHud::Picture_Hot_Skills) self.contents.blt(0, 0, bitmap, Rect.new(0, 0, 156, 48)) skill_count = 0 for button in Crissaegrim_ABS::Skill_Button.keys next if button == nil skill = $data_skills[Crissaegrim_ABS::Skill_Button[button]] next if skill == nil show_icon(skill, 10 + 28 * skill_count, 8) self.contents.font.size = 16 # self.contents.draw_text(16 + 28 * skill_count, 26, 32, 18, "") skill_count += 1 end end def show_icon(item, x, y, enabled = true) if item != nil draw_icon(item.icon_index, x, y, enabled) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 end end end #---------------------------------------------------------- class Window_CrissaegrimHud3 < Window_Base def initialize super(-12,225,80,202) self.opacity = 0 self.visible = false update end def update if CrissaegrimHud::OnOff_Hud_Switch == 0 self.visible = true self.active = true else if $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true self.visible = true self.active = true else self.visible = false self.active = false end end self.contents.clear bitmap = Cache.system(CrissaegrimHud::Picture_Hot_Items) self.contents.blt(0, 0, bitmap, Rect.new(0, 0, 48, 170)) item_count = 0 for button in Crissaegrim_ABS::Item_Button.keys next if button == nil item = $data_items[Crissaegrim_ABS::Item_Button[button]] next if item == nil show_item_icon(item, 4, 8 + 30 * item_count) self.contents.font.size = 16 self.contents.draw_text(28, 12 + 30 * item_count, 32, 18, $game_party.item_number(item)) item_count += 1 end end def show_item_icon(item, x, y, enabled = true) if item != nil draw_icon(item.icon_index, x, y, enabled) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 end end end #---------------------------------------------------------- class Scene_Map alias hud_start start alias hud_update update alias hud_terminate terminate def start super @hud = Window_CrissaegrimHud.new @hud2 = Window_CrissaegrimHud2.new @hud3 = Window_CrissaegrimHud3.new hud_start end def update super @hud.update @hud2.update @hud3.update hud_update end def terminate super @hud.dispose @hud2.dispose @hud3.dispose hud_terminate end end
Dernière édition par fabY le Mar 3 Mar 2009 - 18:47, édité 9 fois
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 15:22
Troisième script "ABS" :
Code:
#============================================================================== # Crissaegrim ABS # Traduit par nova # http://rpgnation.free.fr #============================================================================== #-------------------------------------------------------------- # Crédits : Vlad, Chronos, Drod, nova (traduction) #-------------------------------------------------------------- # Pour créer un monstre, créer un event : # Enemy ID - L'ID de l'ennemi correspond à la base de données; # Die X - onde X = 0 ou 1,2,3,4 (0 disparait après l'avoir tué, 1 active l'interupteur local 'A', 2 active l'interupteur local 'B', 3 active l'interupteur local 'C', 4 active l'interupteur local 'D') # OBS.: entre X et X > 4 ,activer un interupteur X; # Follow X - Pour que l'event suit le héros. X indique le nombre de pas necessaire pour que l'event se déplace en direction du héros. #-------------------------------------------------------------- # Configuration général #-------------------------------------------------------------- module Crissaegrim_ABS #-------------------------------------------------------------- # Pour lancer une attaque physique, appuyez sur A : Attack_Button = Input::X #-------------------------------------------------------------- # Pour lancer une compétence, appuyez sur S ou D : Skill_Button = {Input::Y=> 0, Input::Z => 0} #-------------------------------------------------------------- # Pour utiliser un objet, appuyez sur Q ou W : Item_Button = {Input::L => 0, Input::R => 0} #-------------------------------------------------------------- Distance_Weapons = {} # Armes à distance. # Pour utiliser une arme à distance, faites: Distance_Weapons[U] = [V, W, X, Y, Z] : # U : ID de l'arme, V:Cases, W:Vitesse, X:Distance, Y:Munitions, Z:Temps d'attente avant l'attaque # PS: Le graphique de projectile doit être seul. Distance_Weapons[4] = ["!$Arrow", 6, 5, 21, 30] #-------------------------------------------------------------- Distance_Skills = {} # Compétences à distance. # Pour utiliser une compétence à distance, faites: Distance_Skills[V] = [W, X, Y, Z] e mude: # U : ID de l'arme, V:Cases, W:Vitesse, X:Distance, Y:Munitions, Z:Temps d'attente avant l'attaque # PS: Le graphique de projectile doit être seul. Distance_Skills[59] = ["!$FireBall", 4, 5, 60] Distance_Skills[63] = ["!$EnergyBall_2", 4, 5, 60] Distance_Skills[67] = ["!$EnergyBall_6", 4, 5, 60] Distance_Skills[71] = ["!$EnergyBall", 4, 5, 60] Distance_Skills[73] = ["!$EnergyBall_6", 4, 5, 60] Distance_Skills[76] = ["!$EnergyBall_5", 4, 5, 60] Distance_Skills[79] = ["!$EnergyBall_4", 4, 5, 60] #-------------------------------------------------------------- Distance_Items = {} # Objets à distances. # Pour utiliser un objet à distance, faites: Distance_Items[U] = [V, W, X, Y, Z] e mude: ## U : ID de l'arme, V:Cases, W:Vitesse, X:Distance, Y:Munitions, Z:Temps d'attente avant l'attaque # PS: Le graphique de projectile doit être seul. Distance_Items[16] = ["!$EnergyBall_3", 6, 5, 16, 30] Distance_Items[18] = ["!$EnergyBall", 6, 5, 18, 30] Distance_Items[20] = ["!$EnergyBall_6", 6, 5, 20, 30] #-------------------------------------------------------------- # Animation quand le héros passe au niveau supérieur. #Changement de 40 à l'ID de l'animation. LevelUp_Ani = 40 #-------------------------------------------------------------- #Animation de l'attaque ennemi, faites Enemy_atk_ani[X] = Y # et faites remplacer le X par l'ID de l'ennemi, et Y par l'ID de l'animation. Enemy_atk_ani = {} Enemy_atk_ani[2] = 13 Enemy_atk_ani[3] = 19 #-------------------------------------------------------------- end #==============================================================================
#-------------------------------------------------------------- # Game Character #-------------------------------------------------------------- class Game_Character attr_accessor :hp attr_accessor :mp attr_accessor :damage attr_accessor :critical attr_accessor :wait_action attr_accessor :die alias crissaegrim_abs_gchar_initialize initialize def initialize @hp = 0 @mp = 0 @die = 0 @wait_action = 0 @damage = nil @critical = false crissaegrim_abs_gchar_initialize end def recive_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]) if self.is_a?(Game_Player) $game_actors[1].attack_effect(attacker_status) dmg = $game_actors[1].make_attack_damage_value(attacker_status) $game_player.damage = dmg $scene = Scene_Gameover.new if $game_actors[1].hp <= 0 elsif self.is_a?(Game_Event) self.enemy_status.make_attack_damage_value(attacker_status) dmg = self.enemy_status.make_attack_damage_value(attacker_status) self.damage = dmg self.hp -= dmg self.kill_enemy if self.hp <= 0 end end def recive_skill(attacker, skill) 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]) if self.is_a?(Game_Player) dmag = $game_actors[1].make_obj_damage_value($game_actors[1], $data_skills[skill]) $game_actors[1].skill_effect($game_actors[1], $data_skills[skill]) $game_player.damage = dmag $scene = Scene_Gameover.new if $game_actors[1].hp <= 0 elsif self.is_a?(Game_Event) dmg = enemy_status.make_obj_damage_value(enemy_status, $data_skills[skill]) enemy_status.skill_effect(enemy_status, $data_skills[skill]) self.hp -= dmg self.damage = dmg self.kill_enemy if self.hp <= 0 end end def recive_itemeffect(attacker, item) 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]) if self.is_a?(Game_Player) dmag = $game_actors[1].make_obj_damage_value($game_actors[1], $data_items[item]) $game_actors[1].item_effect($game_actors[1], $data_items[item]) $game_player.damage = dmag $scene = Scene_Gameover.new if $game_actors[1].hp <= 0 elsif self.is_a?(Game_Event) dmg = enemy_status.make_obj_damage_value(enemy_status, $data_items[item]) enemy_status.item_effect($game_actors[1], $data_items[item]) self.hp -= dmg self.damage = dmg self.kill_enemy if self.hp <= 0 end end def kill_enemy $game_actors[1].gain_exp(enemy_status.exp, 1) Sound::play_enemy_collapse if @die == 0 self.erase elsif @die == 1 key = [$game_map.map_id, self.id, "A"] $game_self_switches[key] = true elsif @die == 2 key = [$game_map.map_id, self.id, "B"] $game_self_switches[key] = true elsif @die == 3 key = [$game_map.map_id, self.id, "C"] $game_self_switches[key] = true elsif @die == 4 key = [$game_map.map_id, self.id, "D"] $game_self_switches[key] = true else $game_switches[@die] = true $game_map.need_refresh = true end @automove = false refresh 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 end
#-------------------------------------------------------------- # Game Event #-------------------------------------------------------------- class Game_Event < Game_Character attr_reader :inimigo attr_reader :enemy_status attr_accessor :move_speed attr_accessor :through alias crissaegrim_abs_gevent_initialize initialize alias crissaegrim_abs_gevent_update update alias crissaegrim_abs_gevent_refresh refresh def initialize(map_id, event) @inimigo = false @automove = false crissaegrim_abs_gevent_initialize(map_id, event) end def update crissaegrim_abs_gevent_update if self.wait_action > 0 self.wait_action -= 1 end if @inimigo new_x = (@x + (@direction == 4 ? -1 : @direction == 6 ? 1 : 0)) new_y = (@y + (@direction == 8 ? -1 : @direction == 2 ? 1 : 0)) if $game_player.x == new_x and $game_player.y == new_y and self.wait_action <= 0 for action in $data_enemies[@enemy_id].actions next unless enemy_status.conditions_met?(action) case action.kind when 0 case action.basic when 0 $game_player.recive_atk(self) $game_player.animation_id = self.enemy_atk_animation_id $game_player.jump(0,0) when 1..3 return end when 1 case $data_skills[action.skill_id].scope when 1..6 if $data_enemies[@enemy_id].maxmp >= $data_skills[action.skill_id].mp_cost $data_enemies[@enemy_id].maxmp -= $data_skills[action.skill_id].mp_cost $game_player.animation_id = $data_skills[action.skill_id].animation_id $game_player.jump(0,0) $game_player.recive_skill(self, action.skill_id) end when 7..11 if $data_enemies[@enemy_id].maxmp >= $data_skills[action.skill_id].mp_cost $data_enemies[@enemy_id].maxmp -= $data_skills[action.skill_id].mp_cost enemy_status.skill_effect(enemy_status, $data_skills[action.skill_id]) rec = enemy_status.make_obj_damage_value(enemy_status, $data_skills[action.skill_id]) self.hp -= rec self.animation_id = $data_skills[action.skill_id].animation_id end end end end speed = $data_enemies[@enemy_id].agi / 10 self.wait_action = 60 - speed end end if @automove unless moving? self.follow_hero($game_player.x, $game_player.y) if in_range?(self, $game_player, @follow_distance) end end end def in_range?(event, target, distance) x = (event.x - target.x) * (event.x - target.x) y = (event.y - target.y) * (event.y - target.y) r = x + y return true if r <= (distance * distance) return false end def refresh crissaegrim_abs_gevent_refresh @inimigo = false @enemy_id = check_comment("Enemy") @die = check_comment("Die") @follow_distance = check_comment("Follow") @automove = true if @follow_distance > 0 if @enemy_id > 0 @inimigo = true @enemy_status = Game_Enemy.new(1, @enemy_id) self.hp = @enemy_status.maxhp self.mp = @enemy_status.maxmp end 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 enemy_atk_animation_id if Crissaegrim_ABS::Enemy_atk_ani[@enemy_id] return (@enemy_status.nil? ? 0 : Crissaegrim_ABS::Enemy_atk_ani[@enemy_id]) else return (@enemy_status.nil? ? 0 : 1) end end end
#-------------------------------------------------------------- # Game Player #-------------------------------------------------------------- class Game_Player < Game_Character alias crissaegrim_abs_gplayer_initialize initialize alias crissaegrim_abs_gplayer_update update alias crissaegrim_abs_gplayer_refresh refresh def initialize crissaegrim_abs_gplayer_initialize @distance = Distance_Base.new end def update crissaegrim_abs_gplayer_update if self.wait_action > 0 self.wait_action -= 1 end @distance.update #-------------------------------------------------------------- if Input.trigger?(Crissaegrim_ABS::Attack_Button) and self.wait_action <= 0 if Crissaegrim_ABS::Distance_Weapons.has_key?($game_actors[1].weapon_id) hero_x = ($game_player.x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0)) hero_y = ($game_player.y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0)) if $game_map.passable?(hero_x, hero_y) or $game_map.passable?(hero_x, hero_y, 0x02) if $game_party.has_item?($data_items[Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][3]]) $game_map.events[1].moveto(hero_x, hero_y) $game_map.events[1].set_graphic(Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][0],0) $game_map.events[1].move_speed = Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][1] $game_map.events[1].through = true $game_party.consume_item($data_items[Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][3]]) case $game_player.direction when 2 $game_map.events[1].turn_down when 4 $game_map.events[1].turn_left when 6 $game_map.events[1].turn_right when 8 $game_map.events[1].turn_up end end self.wait_action = Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][4] end else 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.recive_atk(self) event.animation_id = self.player_atk_animation_id event.jump(0,0) speed = $game_actors[1].agi / 10 self.wait_action = 60 - speed break end end end end end
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 15:23
2eme partie du script 3 :
Code:
if Crissaegrim_ABS::Distance_Weapons.has_key?($game_actors[1].weapon_id) $game_map.events[1].refresh weapon_x = $game_map.events[1].x weapon_y = $game_map.events[1].y for event in $game_map.events.values if event.inimigo if event.x == weapon_x and event.y == weapon_y event.recive_atk(self) event.animation_id = self.player_atk_animation_id event.jump(0,0) $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0,0) end end end end #-------------------------------------------------------------- for button in Crissaegrim_ABS::Skill_Button.keys if Input.trigger?(button) and Crissaegrim_ABS::Skill_Button[button] != nil and Crissaegrim_ABS::Skill_Button[button] != 0 and $game_actors[1].mp >= $data_skills[Crissaegrim_ABS::Skill_Button[button]].mp_cost and self.wait_action <= 0 @skl = Crissaegrim_ABS::Skill_Button[button] $game_temp.common_event_id = $data_skills[@skl].common_event_id if $data_skills[@skl].common_event_id > 0 Sound.play_use_skill if Crissaegrim_ABS::Distance_Skills.has_key?(@skl) hero_x = ($game_player.x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0)) hero_y = ($game_player.y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0)) if $game_map.passable?(hero_x, hero_y) or $game_map.passable?(hero_x, hero_y, 0x02) if $game_actors[1].mp >= $data_skills[@skl].mp_cost $game_map.events[1].moveto(hero_x, hero_y) $game_map.events[1].set_graphic(Crissaegrim_ABS::Distance_Skills[@skl][0],0) $game_map.events[1].move_speed = Crissaegrim_ABS::Distance_Skills[@skl][1] $game_map.events[1].through = true $game_actors[1].mp -= $game_actors[1].calc_mp_cost($data_skills[@skl]) case $game_player.direction when 2 $game_map.events[1].turn_down when 4 $game_map.events[1].turn_left when 6 $game_map.events[1].turn_right when 8 $game_map.events[1].turn_up end end self.wait_action = Crissaegrim_ABS::Distance_Skills[@skl][3] end else case $data_skills[@skl].scope when 1..6 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 $game_actors[1].mp -= $game_actors[1].calc_mp_cost($data_skills[@skl]) event.recive_skill(self, @skl) event.animation_id = self.player_skl_animation_id(@skl) event.jump(0,0) end end end when 7..11 $game_actors[1].mp -= $game_actors[1].calc_mp_cost($data_skills[@skl]) $game_player.animation_id = player_skl_animation_id(@skl) $game_actors[1].skill_effect($game_actors[1], $data_skills[@skl]) end speed = $game_actors[1].agi / 10 self.wait_action = 60 - speed break end end end if Crissaegrim_ABS::Distance_Skills.has_key?(@skl) $game_map.events[1].refresh weapon_x = $game_map.events[1].x weapon_y = $game_map.events[1].y for event in $game_map.events.values if event.inimigo if event.x == weapon_x and event.y == weapon_y event.recive_skill(self, @skl) event.animation_id = self.player_skl_animation_id(@skl) event.jump(0,0) $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0,0) end end end end #-------------------------------------------------------------- for button in Crissaegrim_ABS::Item_Button.keys if Input.trigger?(button) and Crissaegrim_ABS::Item_Button[button] != nil and Crissaegrim_ABS::Item_Button[button] != 0 and $game_party.item_number($data_items[Crissaegrim_ABS::Item_Button[button]]) > 0 and self.wait_action <= 0 @itm = Crissaegrim_ABS::Item_Button[button] $game_temp.common_event_id = $data_items[@itm].common_event_id if $data_items[@itm].common_event_id > 0 if Crissaegrim_ABS::Distance_Items.has_key?(@itm) hero_x = ($game_player.x + ($game_player.direction == 4 ? -1 : $game_player.direction == 6 ? 1 : 0)) hero_y = ($game_player.y + ($game_player.direction == 8 ? -1 : $game_player.direction == 2 ? 1 : 0)) if $game_map.passable?(hero_x, hero_y) or $game_map.passable?(hero_x, hero_y, 0x02) if $game_party.has_item?($data_items[Crissaegrim_ABS::Distance_Items[@itm][3]]) $game_map.events[1].moveto(hero_x, hero_y) $game_map.events[1].set_graphic(Crissaegrim_ABS::Distance_Items[@itm][0],0) $game_map.events[1].move_speed = Crissaegrim_ABS::Distance_Items[@itm][1] $game_map.events[1].through = true $game_party.consume_item($data_items[Crissaegrim_ABS::Distance_Items[@itm][3]]) case $game_player.direction when 2 $game_map.events[1].turn_down when 4 $game_map.events[1].turn_left when 6 $game_map.events[1].turn_right when 8 $game_map.events[1].turn_up end end self.wait_action = Crissaegrim_ABS::Distance_Items[@itm][4] end else case $data_items[@itm].scope when 1..6 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.recive_itemeffect(self, @itm) event.animation_id = $data_items[@itm].animation_id $game_party.consume_item($data_items[@itm]) event.jump(0,0) end end end when 7..11 $game_player.animation_id = player_item_animation_id(@itm) $game_actors[1].item_effect($game_actors[1], $data_items[@itm]) $game_party.consume_item($data_items[@itm]) $game_temp.common_event_id = $data_items[@itm].common_event_id if $data_items[@itm].common_event_id > 0 end speed = $game_actors[1].agi / 10 self.wait_action = 60 - speed end end end if Crissaegrim_ABS::Distance_Items.has_key?(@itm) $game_map.events[1].refresh weapon_x = $game_map.events[1].x weapon_y = $game_map.events[1].y for event in $game_map.events.values if event.inimigo if event.x == weapon_x and event.y == weapon_y event.recive_itemeffect(self, @itm) event.animation_id = $data_items[@itm].animation_id event.jump(0,0) $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0,0) 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(skl) return ($game_actors[1].nil? ? 0 : $data_skills[skl].animation_id) end def player_item_animation_id(itm) return ($game_actors[1].nil? ? 0 : $data_items[itm].animation_id) end end end
#-------------------------------------------------------------- # Game Actor #-------------------------------------------------------------- class Game_Actor alias crissaegrim_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 crissaegrim_abs_change_exp(exp,show) end def show_level_up $game_player.animation_id = Crissaegrim_ABS::LevelUp_Ani $game_actors[1].hp = $game_actors[1].maxhp $game_actors[1].mp = $game_actors[1].maxmp $game_player.damage = "Niv. +" end end
#-------------------------------------------------------------- # Distance Weapons #-------------------------------------------------------------- class Distance_Base < Game_Character def initialize refresh end def refresh if Crissaegrim_ABS::Distance_Weapons.has_key?($game_actors[1].weapon_id) weapondistance_x = ($game_map.events[1].x + ($game_map.events[1].direction == 4 ? -1 : $game_map.events[1].direction == 6 ? 1 : 0)) weapondistance_y = ($game_map.events[1].y + ($game_map.events[1].direction == 8 ? -1 : $game_map.events[1].direction == 2 ? 1 : 0)) if $game_map.passable?(weapondistance_x, weapondistance_y) or $game_map.passable?(weapondistance_x, weapondistance_y, 0x02) unless $game_map.events[1].moving?; $game_map.events[1].move_away_from_player end end if $game_map.events[1].moving? == false $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) end end for button in Crissaegrim_ABS::Skill_Button.keys if Crissaegrim_ABS::Distance_Skills.has_key?(Crissaegrim_ABS::Skill_Button[button]) weapondistance_x = ($game_map.events[1].x + ($game_map.events[1].direction == 4 ? -1 : $game_map.events[1].direction == 6 ? 1 : 0)) weapondistance_y = ($game_map.events[1].y + ($game_map.events[1].direction == 8 ? -1 : $game_map.events[1].direction == 2 ? 1 : 0)) if $game_map.passable?(weapondistance_x, weapondistance_y) or $game_map.passable?(weapondistance_x, weapondistance_y, 0x02) unless $game_map.events[1].moving?; $game_map.events[1].move_away_from_player end end if $game_map.events[1].moving? == false $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) end end end for key in Crissaegrim_ABS::Item_Button.keys if Crissaegrim_ABS::Distance_Items.has_key?(Crissaegrim_ABS::Item_Button[key]) weapondistance_x = ($game_map.events[1].x + ($game_map.events[1].direction == 4 ? -1 : $game_map.events[1].direction == 6 ? 1 : 0)) weapondistance_y = ($game_map.events[1].y + ($game_map.events[1].direction == 8 ? -1 : $game_map.events[1].direction == 2 ? 1 : 0)) if $game_map.passable?(weapondistance_x, weapondistance_y) or $game_map.passable?(weapondistance_x, weapondistance_y, 0x02) unless $game_map.events[1].moving?; $game_map.events[1].move_away_from_player end end if $game_map.events[1].moving? == false $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) end end end end
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 15:24
Et enfin la troisième partie :
Code:
def update if Crissaegrim_ABS::Distance_Weapons.has_key?($game_actors[1].weapon_id) case $game_player.direction when 2 map_height = $game_player.y + Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][2] when 4 map_width = $game_player.x - Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][2] when 6 map_width = $game_player.x + Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][2] when 8 map_height = $game_player.y - Crissaegrim_ABS::Distance_Weapons[$game_actors[1].weapon_id][2] end if Crissaegrim_ABS::Distance_Weapons.has_key?($game_actors[1].weapon_id) if map_width == $game_map.events[1].x or $game_map.events[1].x == 0 $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) elsif map_height == $game_map.events[1].y or $game_map.events[1].y == 0 $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) end end refresh end for button in Crissaegrim_ABS::Skill_Button.keys if Crissaegrim_ABS::Distance_Skills.has_key?(Crissaegrim_ABS::Skill_Button[button]) case $game_player.direction when 2 map_height = $game_player.y + Crissaegrim_ABS::Distance_Skills[Crissaegrim_ABS::Skill_Button[button]][2] when 4 map_width = $game_player.x - Crissaegrim_ABS::Distance_Skills[Crissaegrim_ABS::Skill_Button[button]][2] when 6 map_width = $game_player.x + Crissaegrim_ABS::Distance_Skills[Crissaegrim_ABS::Skill_Button[button]][2] when 8 map_height = $game_player.y - Crissaegrim_ABS::Distance_Skills[Crissaegrim_ABS::Skill_Button[button]][2] end if Crissaegrim_ABS::Distance_Skills.has_key?(Crissaegrim_ABS::Skill_Button[button]) if map_width == $game_map.events[1].x or $game_map.events[1].x == 0 $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) elsif map_height == $game_map.events[1].y or $game_map.events[1].y == 0 $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) end end refresh end end for key in Crissaegrim_ABS::Item_Button.keys if Crissaegrim_ABS::Distance_Items.has_key?(Crissaegrim_ABS::Item_Button[key]) case $game_player.direction when 2 map_height = $game_player.y + Crissaegrim_ABS::Distance_Items[Crissaegrim_ABS::Item_Button[key]][2] when 4 map_width = $game_player.x - Crissaegrim_ABS::Distance_Items[Crissaegrim_ABS::Item_Button[key]][2] when 6 map_width = $game_player.x + Crissaegrim_ABS::Distance_Items[Crissaegrim_ABS::Item_Button[key]][2] when 8 map_height = $game_player.y - Crissaegrim_ABS::Distance_Items[Crissaegrim_ABS::Item_Button[key]][2] end if Crissaegrim_ABS::Distance_Items.has_key?(Crissaegrim_ABS::Item_Button[key]) if map_width == $game_map.events[1].x $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) elsif map_height == $game_map.events[1].y $game_map.events[1].set_graphic("",0) $game_map.events[1].moveto(0, 0) end end refresh end end 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 crissaegrim_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 crissaegrim_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 Window_Skill < Window_Selectable alias crissaegrim_abs_wskill_draw_item draw_item def draw_item(index) crissaegrim_abs_wskill_draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 enabled = true draw_item_name(skill, rect.x, rect.y, enabled) self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2) end end end class Scene_Skill alias crissaegrim_abs_sskill_start start alias crissaegrim_abs_sskill_update update alias crissaegrim_abs_sskill_update_skill_selection update_skill_selection def start @memory = Window_Command.new(150, ["Mémoriser !"]) @memory.active = false @memory.visible = false @memory.x = (544 - @memory.width) / 2 @memory.y = (416 - @memory.height) / 2 @memory.z = 1500 crissaegrim_abs_sskill_start end def update @memory.update if @memory.active crissaegrim_abs_sskill_update return update_memory if @memory.active end def update_skill_selection crissaegrim_abs_sskill_update_skill_selection for button in Crissaegrim_ABS::Skill_Button.keys if Input.trigger?(button) Sound.play_decision Crissaegrim_ABS::Skill_Button[button] = @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 end
#-------------------------------------------------------------- # Window Item #-------------------------------------------------------------- class Scene_Item alias crissaegrim_abs_sitem_start start alias crissaegrim_abs_sitem_update update alias crissaegrim_abs_sitem_update_item_selection update_item_selection def start @memory = Window_Command.new(150, ["Mémoriser !"]) @memory.active = false @memory.visible = false @memory.x = (544 - @memory.width) / 2 @memory.y = (416 - @memory.height) / 2 @memory.z = 1500 crissaegrim_abs_sitem_start end def update @memory.update if @memory.active crissaegrim_abs_sitem_update return update_memory if @memory.active end def update_item_selection crissaegrim_abs_sitem_update_item_selection for button in Crissaegrim_ABS::Item_Button.keys if Input.trigger?(button) Sound.play_decision Crissaegrim_ABS::Item_Button[button] = @item_window.item.id @memory.active = @memory.visible = true @item_window.active = false end end end def update_memory if Input.trigger?(Input::C) Sound.play_decision @memory.active = @memory.visible = false @item_window.active = true end end end
#-------------------------------------------------------------- # Fim do ABS #--------------------------------------------------------------
Dernière édition par fabY le Ven 28 Mar 2008 - 16:06, édité 1 fois
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 15:39
Utiliser le script :
Lorsque vous voulez créer un monstre, insérez 3 commentaires :
Le 1er Commentaire indique l'ID de l'ennemi dans la base de données du jeu. En l'occurence, il s'agit la du premier ennemi (mettez 2 si c'est le 2eme ennemi, 3 pour le troisième etc...). Le 2ème indique la façon dont il meurt. Le n°1 fera disparaitre l'ennemi après l'avoir tué. Le n°2, activera l'interrupteur local. Le 3ème est optionnel. "Follow" indique que l'ennemi vous suivra. Le chiffre entre crochets signifie à combien de cases l'ennemi vous vois. Par exemple. Pour qu'un ennemi vous vois à 7carreaux, écrivez Follow [7].
Pour attaquer, utiliser la touche A ! Pour mémoriser un sort, allez dans le menu. Héros>Magie>Sélection du sort que vous voulez glissez dans la 1er fenêtre>Appuie de la touche S, ou D. Pour l'utilise, en pleine map, appuyez sur la touche S ou D.
Mémoriser un Objet : Pour mémoriser un sort, allez dans le menu. Héros>Objets>Sélection de l'objet que vous voulez glissez dans la 2eme fenêtre>Appuie de la touche Q, ou W. Pour l'utilise, en pleine map, appuyez sur la touche Q, ou W.
Dernière édition par fabY le Mar 3 Mar 2009 - 18:48, édité 2 fois
Invité
Invité
Sujet: Combats A-RPG !Script à prendre. Ven 28 Mar 2008 - 16:10
wow il est super ce script je vais directement le mettre ^^
merci fabY
LOD
Illusionniste Lv.12
Age : 30 Inscrit le : 16/03/2008 Messages : 666
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 16:14
trop bon script
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 16:38
Super! Merci fabY!
Invité
Invité
Sujet: Combats ABS !Script à prendre. Ven 28 Mar 2008 - 19:46
bonjour tu pourrais expliquer comment on utilise un objet qui bouge comme les boules d'énergie ou l'arc a flèche
merci d'avance
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Combats ABS Ven 28 Mar 2008 - 22:22
J' ai trouver quelque chose qui ne me plait pas, quand je fait un sort, l' animation ne se fait pas sur le monstre...
Invité
Invité
Sujet: Re: [VX] Combats ABS Sam 29 Mar 2008 - 8:50
le script est trés bien mais bourré de bug! IL faut le corriger avant de l'utiliser moi par ex j'ai enlevé les fenètres noir, activé l'anti-lag rajouté des sorts(pas un bug) et créé un objet n°21 nommé flèche pour pouvoir tirer à l'arc et je continue toujours.
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Combats ABS Sam 29 Mar 2008 - 9:39
A vos risques et périls x) . Ce n'est pas moi qui ai crée le script, si vous n'avez toujours pas télécharger la démo, c'est le moment car elle vous apprendra des choses
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 6:56
S'il te plaît je vais ou pour gérer le mob ?
Hp,Mp,attaque ?
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 8:52
le mob?
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 8:59
Raa mais un mob c'est un monstre personne ne sais ca ou quoi ! ? ^^ donc un monstre .. ?
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 9:01
dans la base de données -.-
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 9:18
Bah.
Prenons un exemple.
Dans la base de donné, ton premier monstre, c'est un blob. Vie : 100pv. Attaque : 23. Def : 1 Ton deuxième, un loup argenté. Vie : 300pv. Attaque : 40. Def : 5.
Tu vas sur ta map. Tu crée deux évènements : loup argenté et blob. Pour le blob, tu insère les commentaires suivants :
Commentaires : Enemy 1 <- puisque c'est l'ennemie n°1 de ta base de donnée. Commentaires : Die 2 <- Là, lorsque le monstre meurt, il active l'interrupteur local A. Tu fait une deuxième page, avec condition(interrupteur A est activé), attendre 400 frames, puis désactiver interrupteur local A (comme c'est un monstre banal, il revit). Commentaires : Follow [optionnel] <- Rien à dire, il te suis dés qu'il te voit (espace de 5 carreaux je crois).
Pour le loup :
Commentaires : Enemy 2 <- puisque c'est l'ennemie n°2 de ta base de donnée. Commentaires : Die 1 <- Là, lorsque le monstre meurt, il active l'interrupteur local A. Tu fait une deuxième page, avec condition (interrupteur A est activé), message : Tu as battue le boss du jeu, bravo. Interrupteur B est activé. New page, condition (interrupteur B activé), rien.
Voila.
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 9:33
j'ai comprit merci fabY ^^!!
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 12:28
exuce moi tu peux me dire coment utiliser l'arc a fleche merci
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 12:40
Tu vas dans le menu, et tu l'équipes. Ensuite, pour l'utiliser, appuies sur A...
N'oublies pas de te présenter, c'est obligatoire, avant de poster^^
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 13:35
Ahhh! j' adorerais toujours les membres qui font le travail à notre place :dors:
Alors, tu équipe l' arc, et il te faut en plus de sa, créer les flêches
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 13:46
et comment on fait pour creer les fleches?
Raitosan
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 14:06
tu vas dans la base de donnée, objets, tu augmente la taille max de 1 et tu fait ta flêche...
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 14:29
merci beaucoup
Invité
Invité
Sujet: Re: [VX] Combats ABS Dim 30 Mar 2008 - 15:02
mais on sais pas tirer de loin et on ne voi pas la fleche partor