Ex-Admin Cruelle
Age : 32 Inscrit le : 03/07/2008 Messages : 2441
| Sujet: Rajouter une caractéristique ? [resolu] Sam 7 Mar 2009 - 14:15 | |
| Bonjour, Dans rmvx, de base, on a le choix qu'entre 4 caractéristiques, attaque, défense, intelligence et agilité. Le problème c'est que la défense magique est gérée elle aussi par l'intelligence. Donc si on veut faire par exemple un monstre qui tape fort au sort mais pas de défense magique on est foutu... Donc je me demandait si c'est possible de rajouter une caractéristique ou non ? J'ai essayé de faire un p'tit truc : - Code:
-
module RPG class Actor def initialize @id = 0 @name = "" @class_id = 1 @initial_level = 1 @exp_basis = 25 @exp_inflation = 35 @character_name = "" @character_index = 0 @face_name = "" @face_index = 0 @parameters = Table.new(7,100) for i in 1..99 @parameters[0,i] = 400+i*50 @parameters[1,i] = 80+i*10 @parameters[2,i] = 15+i*5/4 @parameters[3,i] = 15+i*5/4 @parameters[4,i] = 20+i*5/2 @parameters[5,i] = 20+i*5/2 @parameters[6,i] = 20+i*5/2 end @weapon_id = 0 @armor1_id = 0 @armor2_id = 0 @armor3_id = 0 @armor4_id = 0 @two_swords_style = false @fix_equipment = false @auto_battle = false @super_guard = false @pharmacology = false @critical_bonus = false end attr_accessor :id attr_accessor :name attr_accessor :class_id attr_accessor :initial_level attr_accessor :exp_basis attr_accessor :exp_inflation attr_accessor :character_name attr_accessor :character_index attr_accessor :face_name attr_accessor :face_index attr_accessor :parameters attr_accessor :weapon_id attr_accessor :armor1_id attr_accessor :armor2_id attr_accessor :armor3_id attr_accessor :armor4_id attr_accessor :two_swords_style attr_accessor :fix_equipment attr_accessor :auto_battle attr_accessor :super_guard attr_accessor :pharmacology attr_accessor :critical_bonus end class State def initialize @id = 0 @name = "" @icon_index = 0 @restriction = 0 @priority = 5 @atk_rate = 100 @def_rate = 100 @spi_rate = 100 @agi_rate = 100 @mag_rate = 100 @nonresistance = false @offset_by_opposite = false @slip_damage = false @reduce_hit_ratio = false @battle_only = true @release_by_damage = false @hold_turn = 0 @auto_release_prob = 0 @message1 = "" @message2 = "" @message3 = "" @message4 = "" @element_set = [] @state_set = [] @note = "" end attr_accessor :id attr_accessor :name attr_accessor :icon_index attr_accessor :restriction attr_accessor :priority attr_accessor :atk_rate attr_accessor :def_rate attr_accessor :spi_rate attr_accessor :agi_rate attr_accessor :mag_rate attr_accessor :nonresistance attr_accessor :offset_by_opposite attr_accessor :slip_damage attr_accessor :reduce_hit_ratio attr_accessor :battle_only attr_accessor :release_by_damage attr_accessor :hold_turn attr_accessor :auto_release_prob attr_accessor :message1 attr_accessor :message2 attr_accessor :message3 attr_accessor :message4 attr_accessor :element_set attr_accessor :state_set attr_accessor :note end class Weapon < BaseItem def initialize super @animation_id = 0 @price = 0 @hit = 95 @atk = 0 @def = 0 @spi = 0 @agi = 0 @mag = 0 @two_handed = false @fast_attack = false @dual_attack = false @critical_bonus = false @element_set = [] @state_set = [] end attr_accessor :animation_id attr_accessor :price attr_accessor :hit attr_accessor :atk attr_accessor :def attr_accessor :spi attr_accessor :agi attr_accessor :mag attr_accessor :two_handed attr_accessor :fast_attack attr_accessor :dual_attack attr_accessor :critical_bonus attr_accessor :element_set attr_accessor :state_set end
end
class Game_Battler def clear_extra_values @maxhp_plus = 0 @maxmp_plus = 0 @atk_plus = 0 @def_plus = 0 @spi_plus = 0 @agi_plus = 0 @mag_plus =0 end def mag n = [[base_mag + @mag_plus, 1].max, 999].min for state in states do n *= state.mag_rate / 100.0 end n = [[Integer(n), 1].max, 999].min return n end def mag=(new_mag) @mag_plus += new_mag - self.mag @mag_plus = [[@mag_plus, -999].max, 999].min end def make_obj_damage_value(user, obj) damage = obj.base_damage # get base damage if damage > 0 # a positive number? damage += user.atk * 4 * obj.atk_f / 100 # Attack F of the user damage += user.spi * 2 * obj.spi_f / 100 # Spirit F of the user unless obj.ignore_defense # Except for ignore defense damage -= self.def * 2 * obj.atk_f / 100 # Attack F of the target damage -= self.mag * 1 * obj.spi_f / 100 # Spirit F of the target end damage = 0 if damage < 0 # If negative, make 0 elsif damage < 0 # a negative number? damage -= user.atk * 4 * obj.atk_f / 100 # Attack F of the user damage -= user.mag * 2 * obj.spi_f / 100 # Spirit F of the user end damage *= elements_max_rate(obj.element_set) # elemental adjustment damage /= 100 damage = apply_variance(damage, obj.variance) # variance damage = apply_guard(damage) # guard adjustment if obj.damage_to_mp @mp_damage = damage # damage MP else @hp_damage = damage # damage HP end end end
class Game_Actor < Game_Battler def base_mag n = actor.parameters[6, @level] for item in equips.compact do n += item.mag end return n end end
Mais actor.parameters[6, @level] n'est pas défini alors que @parameters[6,i] = 20+i*5/2 est bien la. Merci d'avance pour votre aide ^^ |
|
Poulet carnivore Lv.2
Age : 29 Inscrit le : 07/03/2009 Messages : 23
| Sujet: Re: Rajouter une caractéristique ? [resolu] Sam 7 Mar 2009 - 15:25 | |
| Je sais pas mais j'ai une question moi aussi: C'est quoi ce Charabia ??? |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: Rajouter une caractéristique ? [resolu] Sam 7 Mar 2009 - 16:11 | |
| c'est de l'ouzbek meridionial...
pour les parameters... il faut s'en méfier: ce sont bien souvent des paramètres d'interface, ceux qui tu regles dans l'editeur (regarde le game_interpreter). Je ne connais pas trop le systeme des stats, mais je crois qu'il faut que tu passes par une autre méthode
berka |
|
Voyageur Lv.10
Age : 42 Inscrit le : 04/12/2008 Messages : 383
| Sujet: Re: Rajouter une caractéristique ? [resolu] Dim 8 Mar 2009 - 9:29 | |
| J'ai déjà du créer un systeme avec plus de stats, j'ai utilisé les courbes d'un autres héros. j'utilisais des paires : ( Héros 1 et 2 de la BDD pour Game_Actor 1, 3 et 4 pour 2, ... ) - Code:
-
def base_mag n_act = $data_actors[@id + 1] n = n_act.parameters[6, @level] for item in equips.compact do n += item.mag end return n end
Sinon, j'utilise aussi souvent un Hash, mais ça depend evidement du nombre de clé à configurer. Ici, une valeur par niveau, 99 niveau, evidement, un Hash est difficilement envisageable ... ASHKA |
|
Ex-Admin Cruelle
Age : 32 Inscrit le : 03/07/2008 Messages : 2441
| Sujet: Re: Rajouter une caractéristique ? [resolu] Mer 11 Mar 2009 - 5:51 | |
| Ouais je pensait faire ça aussi, utiliser une autre courbe d'un héros. T'aurai moyen de me filer une copie de ton système ou tu veux le garder pour toi ? |
|
Voyageur Lv.10
Age : 42 Inscrit le : 04/12/2008 Messages : 383
| Sujet: Re: Rajouter une caractéristique ? [resolu] Mer 11 Mar 2009 - 14:46 | |
| J'ai verifié, c'etait pour une commande donc ça a été supprimé apres livraison. ( En fait, ça ne fait pas tres longtemps que je garde un exemplaire de ce que je scripte et encore, parfois j'oublie ... )
Mais tu pourra refaire ça tres facilement. ( Copie/colle la gestion d'ATK par exemple, extrait des données de la note pour les objets, integre la valeur aux calculs de degats )
Désolé ...
ASHKA |
|
| Sujet: Re: Rajouter une caractéristique ? [resolu] | |
| |
|