Maire Lv.9
Age : 36 Inscrit le : 18/12/2009 Messages : 360
| Sujet: Script de Formation [Résolu] Ven 6 Aoû 2010 - 16:50 | |
| Yop yop !! Alors voici le script en question : - Spoiler:
################################### # # ADD-ON SBS Tankentai # Option Formation # ################################### =begin MODE D'EMPLOI Cet add-on permet d'ajouter un element en plus à vos combat : la formation Cela peux simplement permettre d'avoir un emplacement sur le champs de bataille adapté selon le nombres de combattant. Ou d'avoir des effets plus poussées, en choisissant une formation adapté à sa strategie. N'oubliez pas de placer le script "Modifs globale" en haut de Materials. =end ################################### module HK_sbs_form #Option utilisé au cours du jeu ainsi que l'ordre dans lequel elles sont utilisés # Si rien ne correspond à l'option placé en premier on passe à la suivante et ainsi de suite. # Mettez toujours "base" à moins d'etre CERTAIN d'avoir une option configuré pour chaque "situation". # "base" => correspond à la configuration de base. # "pos" => correspond à l'ecran de selection des positions. # "map" => correspond à l'association "bback / position". # "form" => correspond à l'ecran de selection des formations. Ordre = ["form", "pos", "base"] # Exemple => La configuration par map n'est pas active ##### Configuration de base ##### # Indiquez ici la position qu'ocuppe les combattants : # Nombre de combattant dans l'equipe => [pos X, pos Y] # Remplace la configuration classique du script SBS Tankentai. # ( Vous pouvez ajouter des lignes si vous le voulez 5, 6, ... ) Tab_pos = { 1 => [[461, 189]], 2 => [[467, 167], [473, 238]], 3 => [[431, 157], [444, 238], [493, 200]], 4 => [[423, 148], [446, 211], [470, 167], [490, 249]], 5 => [[], [], [], [], []] } ##### Configuration de la scene de selection des positions de combats ##### # Indiquer le rectangle dans lequel pourra etre placé les battlers des héros. # Limite X min, Y min, X max, Y max Rect_position = [380, 56, 500, 250] # Nom de la map qui apparait dans le menu de selection des positions : Test_bback = "Plaine" ##### Configuration par map ##### # Si vous utilisé un script modifiant le battleback, il est possible de definir les positions en fonction # de la map, afin de coller au mieux au bback utilisé. # ID map => Tableau des positions Pos_map = { 1 => [[423, 148], [446, 211], [470, 167], [490, 249]], 2 => [[423, 148], [446, 211], [470, 167], [490, 249]], 3 => [[423, 148], [446, 211], [470, 167], [490, 249]] } ##### Configuration des formations ##### # En plus des positions adaptés au nombres de héros et de la scene de selection des positions, # ce script offre la possibilité d'avoir un systeme de formation. # Ces formations entrainent differents effets, qu'il est possible de configurer. ( voir ci-dessous ) Liste_form = {} # Code de la formation = differentes informations Liste_form[1] = { "name" => "Héros solitaire", # nom de la formation "id" => 1, # le code de la formation # Liste des effets associés à la formation ( effet collectif ou pour toute l'equipe ) "effet" => [], "liste" => ["av", "ar"], # liste des rangs utilisés dans cette formation # ( "av" pour Avant / "ce" pour Centre / "ar" pour Arriere ) # Config des rangs => index des heros ( en partant de 0 ), coord X / Y des heros # Index 0 est le premier héros du groupe, celui qui apparait sur la map, 1 est le deuxieme, etc ... "av" => [[0, [400, 184]]], # Liste des effets du rang ( respecter la forme => "effet_" + code du rang ("av, "ce" ou "ar" ) !! ) "effet_av" => ["atk_up[50]", "def_down[50]"], "ar" => [[1, [500, 184]], [2, [500, 132]], [3, [500, 238]]], "effet_ar" => [], # Description de la formation ( sur quatres lignes - mettre "" pour une ligne vide ) "desc" => ["Cette formation mets en avant le héros", "solitaire, un guerrier qui ne pense qu'a tuer !!", 'Même ses "amis" restent à distance quand il', "se bats, ces ennemis, eux, meurent ..."] } Liste_form[2] = { "name" => "Carré", "id" => 2, "effet" => ["skill[52]", "gold_up[50]"], "liste" => ["av", "ce"], "av" => [[0, [406, 146]], [1, [406, 226]]], "effet_av" => [], "ce" => [[2, [490, 146]], [3, [490, 226]]], "effet_ce" => [], "desc" => ["Cette formation favorise les mouvements", "collectif grace à l'excellente visibilité qu'elle", "offre pour les membres en retrait.", "Recommandé pour les debutants !!"] } Liste_form[3] = { "name" => "Garde du corps", "id" => 3, "effet" => [], "liste" => ["av", "ce", "ar"], "av" => [[0, [396, 224]], [1, [396, 144]]], "effet_av" => [], "ce" => [[2, [428, 185]]], "effet_ce" => ["skill[33]"], "ar" => [[3, [489, 185]]], "effet_ar" => ["atk_down[50]", "def_up[50]"], "desc" => ["Cette formation permet de proteger", "un allié faible.", "", "Recommandé pour les magiciens !!"] } Liste_form[4] = { "name" => "Générosité", "id" => 4, "effet" => [], "liste" => ["av", "ce", "ar"], "av" => [[2, [509, 134]], [3, [509, 245]]], "effet_av" => ["exp_down[100]"], "ce" => [[1, [441, 189]]], "effet_ce" => ["exp_up[300]"], "ar" => [[0, [494, 189]]], "effet_ar" => ["exp_down[100]"], "desc" => ["Il faut etre généreux avec ses amis !!", "Cette formation donne toute l'experience reçu", "a un seul allié au detriment des autres.", "Idéal pour former un novice en quelques combats !!"] } Liste_form[5] = { "name" => "Magie celeste", "id" => 5, "effet" => ["atk_down[100]", "spi_up[100]"], "liste" => ["av", "ce", "ar"], "av" => [[0, [426, 189]]], "effet_av" => [], "ce" => [[1, [452, 134]], [2, [452, 245]]], "effet_ce" => [], "ar" => [[3, [489, 189]]], "effet_ar" => [], "desc" => ["Dans la vie, faut savoir ce que l'on veux !!", "Nous, ce qu'on aime, c'est la magie !!", "", "Et rien d'autre ..."] } Liste_form[6] = { "name" => "Têtes brulées", "id" => 6, "effet" => ["Prévention"], "liste" => ["av"], "av" => [[0, [396, 136]], [1, [396, 223]], [2, [396, 178]], [3, [396, 266]]], "effet_av" => ["atk_up[20]", "def_down[50]"], "desc" => ["Ces gars courrent au devant des ennuis ...", "Avantage : Ca surprend les ennemis.", "Inconvenient : Soit on attaque, soit on se defend", "Mais il faut choisir ..."] } Liste_form[7] = { "name" => "Phalange", "id" => 7, "effet" => ["exp_down[100]"], "liste" => ["av", "ce", "ar"], "av" => [[0, [396, 129]]], "effet_av" => ["atk_up[50]", "def_down[50]"], "ce" => [[1, [456, 210]], [2, [430, 167]]], "effet_ce" => [], "ar" => [[3, [489, 257]]], "effet_ar" => ["atk_down[50]", "spi_up[50]"], "desc" => ["Formation de combat ultime, trés spécialisé.", "Inutile d'entrainer des combattants experimentés.", "Mieux vaut etre à sa place sur le champs de bataille.", "Ici, chaqu'un a la sienne !!"] } Liste_form[8] = { "name" => "Arriere garde", "id" => 8, "effet" => ["Evasion"], "liste" => ["ar"], "ar" => [[0, [490, 129]], [1, [490, 210]], [2, [490, 167]], [3, [490, 257]]], "effet_ar" => ["atk_down[20]", "def_up[50]"], "desc" => ["Formation hautement defensive.", "Avantage : Plus de chance de réussir une fuite.", "Inconvenient : Soit on attaque, soit on se defend", "Mais il faut choisir ..."] } # Indiquer ici la liste des formations accessibles des le debut du jeu Form_depart = [1, 2, 3, 4, 5, 6, 7, 8] # mettre leur code ici # Indiquer ici le code de la formation utilisé au debut du jeu ( 0 si aucune ) Form_init = 0 # Indiquer ici le gain de pourcentage de l'effet "Prévention" Prevention = 25 # + 25 % de chance de faire une attaque surprise si la formation à cet effet # Indiquer ici la modification de pourcentage de l'effet "Réactivité" Reactif = 25 # - 25 % de chance d'etre piégé par l'ennemi si la formation à cet effet # Pour debloquer des formations in-game, utiliser l'insertion de script suivante : # $game_party.new_formation(code) # en remplacant evidement code par celui qui vous interesse ... end ################################### =begin Liste des effets Les effets collectifs profitent à tous et SONT IMPERATIVEMENT placé au niveau "equipe" ( sinon inactif !! ) Les autres effets sont collectifs ou individuel selon le niveau où ils sont placés. L'effet "skill" au niveau "equipe" profite à tous, mais au rang seulement s'il est placé au niveau "rang"
Il existe plusieurs effets combinant un prefixe, un suffixe et une valeur : Exemple = atk_up[50] => augmentation de 50 % de la force Leurs formes est => prefixe + _ + suffixe + [ + valeur + ]
Prefixe : "atk", "def", "agi" et "spi" designe les stats des héros "hit" designe la precision "eva" designe l'evasion, l'esquive ( different de l'effet "Evasion" !! ) "cri" designe le taux de coup critique ( eviter les "grosses" modifications sauf effet voulu ) "gold" designe l'argent obtenu à la fin d'un combat ## effet collectif !! ## "exp" designe l'experience obtenu à la fin d'un combat
"odd" designe les chances d'etre ciblé par l'ennemi ( ATTENTION : valeur sur 5 et non en % !! ) Si c'est "odd[5]", le héros aura 5 fois plus de chance d'etre ciblé que si c'est "odd[1]" "odd[0]" rend le héros "invisible" aux yeux des ennemis ( jamais ciblé )
"etat" designe le resistance aux changements d'etats Exemple : "etat(2)_up[50]" => augmentation de 50 % de la resistance au "Poison" "elt" designe la resistance aux attaques elementaires Exemple : "elt(9)_down[25]" => diminution de 25 % de la resistance face aux magies de type "Feu"
Suffixe : "up" designe une augmentation "down" designe une diminution
Valeur : Sauf spécification, la valeur est un pourcentage
Gain de competence : se presente sous la forme => "skill" + [ + id + ] Avec l'id de la competence gagné entre crochets
Effet collectif : "Prévention" => Augmente les chances de surprendre les ennemis. "Réactivité" => Diminue les chances d'etre piégé par les ennemis. "Evasion" => 100 % de chance de réussir sa fuite ( si elle est possible evidement ). =end ################################### class Game_Actor < Game_Battler attr_accessor :tab_pos alias hk_form_setup setup def setup(actor_id) @tab_pos = [] hk_form_setup(actor_id) end def get_position tab = HK_sbs_form::Tab_pos[$game_party.members.size] return tab[index] end def get_ref_position for x in 0...HK_sbs_form::Ordre.size type = HK_sbs_form::Ordre[x] case type when "form" return $game_party.get_position(index) if $game_party.form_id != 0 when "map" if HK_sbs_form::Pos_map.key?($game_map.map_id) return HK_sbs_form::Pos_map[$game_map.map_id][index] end when "pos" return [@tab_pos[0] + 16, @tab_pos[1] + 16] if @tab_pos != [] when "base" return get_position end end end def base_position tab = get_ref_position @base_position_x = tab[0] @base_position_y = tab[1] @base_position_x = Graphics.width - base[0] if $back_attack && N01::BACK_ATTACK end def get_bonus_stats(n, type, or_id = nil) return n if $game_party.form_id == 0 tab_effet = $game_party.get_actor_effet(self.index) for effet in tab_effet next unless effet.include?(type) num = 0 id = 0 effet.gsub(/\(([0-9]+)\)/i) { id = $1.to_i } effet.gsub(/\[([0-9]+)\]/i) { num = $1.to_i } return num if effet.include?("odd") if effet.include?("up") tx = 100 + num tx = 0 - num if or_id != nil elsif effet.include?("down") tx = 100 - num tx = num if or_id != nil end return tx if or_id == id n = ((n * tx) / 100) end return n end alias hk_form_gain_exp gain_exp def gain_exp(exp, show) exp = get_bonus_stats(exp, "exp") hk_form_gain_exp(exp, show) end def get_bonus_skill result = [] return result if $game_party.form_id == 0 tab_effet = $game_party.get_actor_effet(self.index) for effet in tab_effet next unless effet.include?("skill") num = 0 effet.gsub(/\[([0-9]+)\]/i) { num = $1.to_i } result.push($data_skills[num]) end return result end end ################################### class Game_Party < Game_Unit attr_accessor :open_form attr_accessor :form_id alias hk_form_init initialize def initialize hk_form_init @open_form = [] @open_form |= HK_sbs_form::Form_depart @form_id = HK_sbs_form::Form_init end def new_formation(id) @open_form |= [id] end def get_position(index) form = HK_sbs_form::Liste_form[@form_id] for type in form["liste"] tab = form[type] for bloc in tab if index == bloc[0] coord = bloc[1] return [coord[0], coord[1]] end end end end def get_actor_rang(index) form = HK_sbs_form::Liste_form[@form_id] for type in form["liste"] tab = form[type] for bloc in tab if index == bloc[0] return type end end end return "av" end def equip_effet form = HK_sbs_form::Liste_form[@form_id] return form["effet"] end def get_actor_effet(index) form = HK_sbs_form::Liste_form[@form_id] result = equip_effet rang = get_actor_rang(index) result |= form["effet_" + rang] end def get_effet_collectif(type) if @form_id != 0 case type when "prev" return true if equip_effet.include?("Prévention") when "reac" return true if equip_effet.include?("Réactivité") when "eva" return true if equip_effet.include?("Evasion") end end return false end end ################################### class Game_Troop < Game_Unit def get_gold_bonus(gold) return gold if $game_party.form_id == 0 tab_effet = $game_party.equip_effet for effet in tab_effet next unless effet.include?("gold") num = 0 effet.gsub(/\[([0-9]+)\]/i) { num = $1.to_i } if effet.include?("up") tx = 100 + num elsif effet.include?("down") tx = 100 - num end gold = ((gold * tx) / 100) end return gold end end ################################### class Scene_Battle < Scene_Base alias hk_form_ratio make_escape_ratio def make_escape_ratio hk_form_ratio @escape_ratio = 150 if $game_party.get_effet_collectif("eva") end end ################################### class Scene_select_position < Scene_Base def start @selec_phase = false @x_min = HK_sbs_form::Rect_position[0] @y_min = HK_sbs_form::Rect_position[1] @x_max = HK_sbs_form::Rect_position[2] @y_max = HK_sbs_form::Rect_position[3] @fond = Sprite.new @fond.bitmap = Cache.system(HK_sbs_form::Test_bback) @fond.x = ((544 / 2) - (@fond.bitmap.width / 2)) @fond.y = ((416 / 2) - (@fond.bitmap.height / 2)) @tab_sprite = [] for actor in $game_party.members s = Sprite.new s.bitmap = Cache.character(actor.character_name) s.src_rect.set(32, 32, 32, 32) if actor.tab_pos == [] s.x = @x_min s.y = @y_min + (actor.index * 32) + 10 else s.x = actor.tab_pos[0] s.y = actor.tab_pos[1] end @tab_sprite.push(s) end @help = Window_Help.new @help.set_text("Selectionner un héros", 1) @liste = Pos_Heros.new @liste.visible = true @liste.active = true @com = Pos_Com.new(@liste.actor) end def terminate @fond.bitmap.dispose @fond.dispose for sprite in @tab_sprite sprite.bitmap.dispose sprite.dispose end @help.dispose @liste.dispose @com.dispose end def update @help.update @liste.update if @com.actor != @liste.actor @com.refresh(@liste.actor) else @com.update end if @select_phase update_selection return end @help.set_text("Selectionner un héros", 1) if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) Sound.play_decision @actor = @liste.actor @sprite = @tab_sprite[@actor.index] @liste.active = false @select_phase = true end end def update_selection @help.set_text("Positionner le battler.", 1) if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_select_position.new elsif Input.press?(Input::UP) if @sprite.y > @y_min @sprite.y -= 1 end elsif Input.press?(Input::DOWN) if @sprite.y < @y_max @sprite.y += 1 end elsif Input.press?(Input::LEFT) if @sprite.x > @x_min @sprite.x -= 1 end elsif Input.press?(Input::RIGHT) if @sprite.x < @x_max @sprite.x += 1 end elsif Input.trigger?(Input::C) Sound.play_decision @actor.tab_pos.clear @actor.tab_pos.push(@sprite.x) @actor.tab_pos.push(@sprite.y) @com.refresh(@actor) @liste.active = true @select_phase = false end end end ################################### class Pos_Heros < Window_Selectable def initialize super(0, 56, 200, 416-128-56) @column_max = 1 self.index = 0 refresh end
def actor return @data[self.index] end
def refresh @data = [] for actor in $game_party.members @data.push(actor) end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end
def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) actor = @data[index] if actor != nil rect.width -= 4 self.contents.draw_text(rect, actor.name, 1) end end end ################################### class Pos_Com < Window_Base def initialize(actor) super(0, 416-128, 544, 128) refresh(actor) end def refresh(actor) @actor = actor self.contents.clear self.contents.draw_text(0, 0, 256, 24, @actor.name, 1) self.contents.draw_text(256, 0, 256, 24, @actor.class.name, 1) if @actor.tab_pos == [] text = "Position actuelle : Non défini" else x = (@actor.tab_pos[0] + 16) y = (@actor.tab_pos[1] + 16) text = "Position actuelle : X = #{x} / Y = #{y}" end self.contents.draw_text(0, 48, 544-32, 24, text, 1) end def actor return @actor end end ################################### class Scene_Formation < Scene_Base def start @page = 4 @fond = Sprite.new @fond.bitmap = Cache.system(HK_sbs_form::Test_bback) @fond.x = ((544 / 2) - (@fond.bitmap.width / 2)) @fond.y = ((416 / 2) - (@fond.bitmap.height / 2)) @tab_sprite = [] for actor in $game_party.members s = Sprite.new s.bitmap = Cache.character(actor.character_name) s.src_rect.set(32, 32, 32, 32) @tab_sprite.push(s) end @help = Window_Help.new @help.set_text('Touche "A" pour changer de page', 1) @liste = Liste_Form.new @liste.visible = true @liste.active = true @com = Form_Com.new(@liste.formation, @page) make_position end def terminate @fond.bitmap.dispose @fond.dispose for sprite in @tab_sprite sprite.bitmap.dispose sprite.dispose end @help.dispose @liste.dispose @com.dispose end def update @help.update @liste.update if @liste.formation != @com.formation or @page != @com.page @com.refresh(@liste.formation, @page) make_position end if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::X) Sound.play_cursor if @page < 4 @page += 1 else @page = 0 end elsif Input.trigger?(Input::C) Sound.play_decision $game_party.form_id = @liste.formation["id"] $scene = Scene_Formation.new end end def make_position form = @liste.formation for type in form["liste"] tab = form[type] for bloc in tab next if bloc[0] > (@tab_sprite.size-1) s = @tab_sprite[bloc[0]] coord = bloc[1] s.x = coord[0] - 16 s.y = coord[1] - 16 end end end end ################################### class Liste_Form < Window_Selectable def initialize super(0, 56, 200, 416-128-56) @column_max = 1 self.index = 0 refresh end
def formation id = @data[self.index] form = HK_sbs_form::Liste_form[id] return form end
def refresh @data = [] for form in $game_party.open_form @data.push(form) if form == $game_party.form_id self.index = @data.size - 1 end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end
def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) id = @data[index] @form = HK_sbs_form::Liste_form[id] if @form != nil rect.width -= 4 if $game_party.form_id == id self.contents.font.color = system_color else self.contents.font.color = normal_color end self.contents.draw_text(rect, @form["name"], 1) end end end ################################### class Form_Com < Window_Base def initialize(form, page) super(0, 416-128, 544, 128) refresh(form, page) end def refresh(form, page) self.contents.clear self.contents.font.color = normal_color @form = form @page = page case @page when 0 self.contents.draw_text(0, 0, 544-32, 24, "Effet d'équipe :", 1) if @form["effet"].empty? self.contents.draw_text(0, 48, 544-32, 24, "Pas d'effet", 1) else draw_effet(@form["effet"]) end when 1 self.contents.draw_text(0, 0, 544-32, 24, 'Effet du rang "Avant" :', 1) if not @form["liste"].include?("av") or @form["effet_av"].empty? self.contents.draw_text(0, 48, 544-32, 24, "Pas d'effet", 1) else draw_effet(@form["effet_av"]) end when 2 self.contents.draw_text(0, 0, 544-32, 24, 'Effet du rang "Centre" :', 1) if not @form["liste"].include?("ce") or @form["effet_ce"].empty? self.contents.draw_text(0, 48, 544-32, 24, "Pas d'effet", 1) else draw_effet(@form["effet_ce"]) end when 3 self.contents.draw_text(0, 0, 544-32, 24, 'Effet du rang "Arriere" :', 1) if not @form["liste"].include?("ar") or @form["effet_ar"].empty? self.contents.draw_text(0, 48, 544-32, 24, "Pas d'effet", 1) else draw_effet(@form["effet_ar"]) end when 4 text = @form["desc"][0] self.contents.draw_text(0, 0, 544-32, 24, text, 1) text = @form["desc"][1] self.contents.draw_text(0, 24, 544-32, 24, text, 1) text = @form["desc"][2] self.contents.draw_text(0, 48, 544-32, 24, text, 1) text = @form["desc"][3] self.contents.draw_text(0, 72, 544-32, 24, text, 1) end end def draw_effet(tab) line = 1 for effet in tab type = "" num = nil catg = "" id = 0 effet.gsub(/\(([0-9]+)\)/i) { id = $1.to_i } effet.gsub(/\[([0-9]+)\]/i) { num = $1.to_i } if effet.include?("up") self.contents.font.color = Color.new(0, 255, 0, 255) type = "Augmentation " elsif effet.include?("down") self.contents.font.color = Color.new(255, 0, 0, 255) type = "Diminution " elsif effet.include?("odd") self.contents.font.color = system_color type = "Risque d'etre ciblé : #{num} / 5" elsif effet.include?("skill") self.contents.font.color = system_color skill = $data_skills[num] type = "Gain de competence : #{skill.name}" else self.contents.font.color = system_color type = effet end if effet.include?("atk") catg = "de l'attaque de #{num} %" elsif effet.include?("def") catg = "de la defense de #{num} %" elsif effet.include?("agi") catg = "de l'agilité de #{num} %" elsif effet.include?("spi") catg = "de la magie de #{num} %" elsif effet.include?("hit") catg = "de la précision de #{num} %" elsif effet.include?("eva") catg = "de l'esquive de #{num} %" elsif effet.include?("cri") catg = "du taux critique de #{num} %" elsif effet.include?("gold") catg = "des gains d'argent de #{num} %" elsif effet.include?("exp") catg = "des gains d'experience de #{num} %" elsif effet.include?("etat") name = $data_states[id].name catg = "de la resistance à '#{name}' de #{num} %" elsif effet.include?("elt") name = $data_system.elements[id] catg = "de la resistance à '#{name}' de #{num} %" end text = type + catg self.contents.draw_text(0, line*24, 544-32, 24, text, 1) line += 1 end end def formation return @form end def page return @page end end ###################################
Et voici l'erreur Cette erreur vient assez rarement juste avant un combat, à mon avis, c'est quand il y a une attaque surprise que cette erreur survient.. maintenant je peux me tromper mais vu qu'elle vient très rarement et que les attaques par surprises sont rare... m'enfin je ne suis pas sûr ^^ Maintenant j'ai une petite question... Ce script modifie les positions définitivement du script kaduki.... est-il possible d'avoir une formation "basique" celle de base de kaduki par exemple ? Merci d'avance pour vos réponses et votre aide.
Dernière édition par Varkan le Lun 9 Aoû 2010 - 22:25, édité 1 fois |
|