Sujet: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 11:07
Il n'y a pas longtemps je demandais un script pour distribuer l'expérience quand on gagnais un niveau au lieu que ce soit automatique (agilité, force, défence,...) et j'ai trouver le script permettant de faire sa et on peut remercier KGC Software pour en étre l'auteur : (script trouver sur RPG créative)
Les 5 parties sont a mettre a la suite mais fautes de place je doit faire plusieurs messages :
@distributed_count = last_distributed_count if last_distributed_count != nil end #-------------------------------------------------------------------------- # ○ 各種修正値を計算 #-------------------------------------------------------------------------- def calc_distribution_values # 継承先で定義 end end
class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor_id : アクター ID #-------------------------------------------------------------------------- alias initialize_KGC_DistributeParameter initialize def initialize(actor_id) @actor_id = actor_id @class_id = $data_actors[actor_id].class_id
initialize_KGC_DistributeParameter(actor_id) end #-------------------------------------------------------------------------- # ○ パラメータ増加量を取得 #-------------------------------------------------------------------------- def gain_parameter_list result = KGC::DistributeParameter::GAIN_PARAMETER # アクター固有 list = KGC::DistributeParameter::PERSONAL_GAIN_PARAMETER[self.id] result = result.merge(list) if list != nil # 職業固有 list = KGC::DistributeParameter::CLASS_GAIN_PARAMETER[self.class_id] result = result.merge(list) if list != nil
return result end #-------------------------------------------------------------------------- # ○ 各種修正値を計算 #-------------------------------------------------------------------------- def calc_distribution_values @rp_cost = 0 @distributed_param = {} gain_parameter_list.each { |k, v| next if v == nil cost = 0 param = 0 distributed_count(k).times { |i| cost_plus = v[0] cost_plus += v[3] * i if v[3] != nil param_plus = v[1] param_plus += v[4] * i if v[4] != nil cost += Integer(cost_plus) param += Integer(param_plus) } @rp_cost += [cost, 0].max @distributed_param[k] = param } end #-------------------------------------------------------------------------- # ○ 各種修正値を修復 #-------------------------------------------------------------------------- def restore_distribution_values calc_distribution_values self.hp = self.hp self.mp = self.mp end #-------------------------------------------------------------------------- # ○ 振り分けによる上昇値を取得 # param : パラメータの Symbol #-------------------------------------------------------------------------- def distributed_param(param) return 0 if @distributed_param == nil return 0 if @distributed_param[param] == nil return @distributed_param[param] end #-------------------------------------------------------------------------- # ● 基本 MaxHP の取得 #-------------------------------------------------------------------------- alias base_maxhp_KGC_DistributeParameter base_maxhp def base_maxhp n = base_maxhp_KGC_DistributeParameter + distributed_param(:maxhp) return n end #-------------------------------------------------------------------------- # ● 基本 MaxMP の取得 #-------------------------------------------------------------------------- alias base_maxmp_KGC_DistributeParameter base_maxmp def base_maxmp n = base_maxmp_KGC_DistributeParameter + distributed_param(:maxmp) return n end #-------------------------------------------------------------------------- # ● 基本攻撃力の取得 #-------------------------------------------------------------------------- alias base_atk_KGC_DistributeParameter base_atk def base_atk n = base_atk_KGC_DistributeParameter + distributed_param(:atk) return n end #-------------------------------------------------------------------------- # ● 基本防御力の取得 #-------------------------------------------------------------------------- alias base_def_KGC_DistributeParameter base_def def base_def n = base_def_KGC_DistributeParameter + distributed_param(:def) return n end #-------------------------------------------------------------------------- # ● 基本精神力の取得 #-------------------------------------------------------------------------- alias base_spi_KGC_DistributeParameter base_spi def base_spi n = base_spi_KGC_DistributeParameter + distributed_param(:spi) return n end #-------------------------------------------------------------------------- # ● 基本敏捷性の取得 #-------------------------------------------------------------------------- alias base_agi_KGC_DistributeParameter base_agi def base_agi n = base_agi_KGC_DistributeParameter + distributed_param(:agi) return n end #-------------------------------------------------------------------------- # ● 命中率の取得 #-------------------------------------------------------------------------- alias hit_KGC_DistributeParameter hit def hit n = hit_KGC_DistributeParameter + distributed_param(:hit) return n end
Goldenflame
Citadin Lv.7
Age : 31 Inscrit le : 13/05/2008 Messages : 151
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 11:12
Script partie 2 :
Code:
#-------------------------------------------------------------------------- # ● 回避率の取得 #-------------------------------------------------------------------------- alias eva_KGC_DistributeParameter eva def eva n = eva_KGC_DistributeParameter + distributed_param(:eva) return n end #-------------------------------------------------------------------------- # ● クリティカル率の取得 #-------------------------------------------------------------------------- alias cri_KGC_DistributeParameter cri def cri n = cri_KGC_DistributeParameter + distributed_param(:cri) return n end #-------------------------------------------------------------------------- # ○ MaxRP の取得 #-------------------------------------------------------------------------- def maxrp n = Integer(eval(KGC::DistributeParameter::MAXRP_EXP)) return [n + maxrp_plus, 0].max end #-------------------------------------------------------------------------- # ○ MaxRP 補正値の取得 #-------------------------------------------------------------------------- def maxrp_plus @maxrp_plus = 0 if @maxrp_plus == nil return @maxrp_plus end #-------------------------------------------------------------------------- # ○ RP の取得 #-------------------------------------------------------------------------- def rp return [maxrp - @rp_cost, 0].max end #-------------------------------------------------------------------------- # ○ 振り分け回数の取得 # param : 振り分け先パラメータ (Symbol) #-------------------------------------------------------------------------- def distributed_count(param) clear_distribution_values if @distributed_count == nil @distributed_count[param] = 0 if @distributed_count[param] == nil return @distributed_count[param] end #-------------------------------------------------------------------------- # ○ RP の増減 # value : 増減量 #-------------------------------------------------------------------------- def gain_rp(value) @maxrp_plus = maxrp_plus + value end #-------------------------------------------------------------------------- # ○ 振り分け回数の増減 # param : 振り分け先パラメータ (Symbol) # value : 増減量 #-------------------------------------------------------------------------- def gain_distributed_count(param, value = 1) n = distributed_count(param) @distributed_count[param] += value if n.is_a?(Integer) end #-------------------------------------------------------------------------- # ○ RP 振り分けによる成長効果適用 # param : 振り分け先パラメータ (Symbol) # reverse : 逆加算のときは true #-------------------------------------------------------------------------- def rp_growth_effect(param, reverse = false) gain = gain_parameter_list[param] return if gain == nil # 無効なパラメータ
if reverse return if distributed_count(param) == 0 # 逆加算不可 else return unless can_distribute?(param) end
gain_distributed_count(param, reverse ? -1 : 1) restore_distribution_values end #-------------------------------------------------------------------------- # ○ パラメータ振り分け可否判定 # param : 振り分け先パラメータ (Symbol) #-------------------------------------------------------------------------- def can_distribute?(param) gain = gain_parameter_list[param] return false if gain == nil # 無効なパラメータ return false if self.rp < distribute_cost(param) # RP 不足 return false if gain[2] <= distributed_count(param) # 回数上限
return true end #-------------------------------------------------------------------------- # ○ パラメータ振り分けコスト計算 # param : 振り分け先パラメータ (Symbol) #-------------------------------------------------------------------------- def distribute_cost(param) gain = gain_parameter_list[param] return 0 if gain == nil # 無効なパラメータ
n = gain[0] n += gain[3] * distributed_count(param) if gain[3] != nil return [Integer(n), 0].max end #-------------------------------------------------------------------------- # ○ パラメータ振り分け時の増加量計算 # param : 振り分け先パラメータ (Symbol) #-------------------------------------------------------------------------- def distribute_gain(param) gain = gain_parameter_list[param] return 0 if gain == nil # 無効なパラメータ
n = gain[1] n += gain[4] * distributed_count(param) if gain[4] != nil return Integer(n) end end
class Window_DistributeParameterActor < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 # actor : アクター #-------------------------------------------------------------------------- def initialize(x, y, actor) super(x, y, Graphics.width, WLH + 32) @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear draw_actor_name(@actor, 4, 0) draw_actor_level(@actor, 140, 0) draw_actor_rp(@actor, 240, 0) end end
gain = @actor.gain_parameter_list[type] value = @actor.distribute_cost(type) self.contents.draw_text(x + 120, y, 40, WLH, value, 2) value = sprintf("%+d", @actor.distribute_gain(type)) self.contents.draw_text(x + 190, y, 40, WLH, value, 2) value = sprintf("%3d/%3d", @actor.distributed_count(type), gain[2]) self.contents.draw_text(x + 236, y, 80, WLH, value, 2) self.contents.font.color = normal_color end end
class Window_DistributeParameterStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize(actor) dx = Graphics.width / 2 + 80 off_h = (WLH + 32) * 2 super(dx, off_h, Graphics.width - dx, Graphics.height - off_h) @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(0, 0, width - 32, WLH, "パラメータ", 1) self.contents.font.color = normal_color dy = WLH gain_params = @actor.gain_parameter_list KGC::DistributeParameter::PARAMS.each { |param| next if gain_params[param] == nil draw_parameter(0, dy, param) dy += WLH } end #-------------------------------------------------------------------------- # ○ 能力値の描画 # x : 描画先 X 座標 # y : 描画先 Y 座標 # type : 能力値の種類 #-------------------------------------------------------------------------- def draw_parameter(x, y, type) case type when :maxhp name = Vocab.hp value = @actor.maxhp when :maxmp name = Vocab.mp value = @actor.maxmp when :atk name = Vocab.atk value = @actor.atk when :def name = Vocab.def value = @actor.def when :spi name = Vocab.spi value = @actor.spi when :agi name = Vocab.agi value = @actor.agi when :hit name = Vocab.hit value = @actor.hit when :eva name = Vocab.eva value = @actor.eva when :cri name = Vocab.cri value = @actor.cri else return end draw_actor_distribute_gauge(@actor, type, x + 106, y, 48) self.contents.font.color = system_color self.contents.draw_text(x + 4, y, 96, WLH, name) self.contents.font.color = normal_color self.contents.draw_text(x + 106, y, 48, WLH, value, 2) end end
class Scene_Menu < Scene_Base if KGC::DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND #-------------------------------------------------------------------------- # ● コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias create_command_window_KGC_DistributeParameter create_command_window def create_command_window create_command_window_KGC_DistributeParameter
return if $imported["CustomMenuCommand"]
@__command_distribute_parameter_index = @command_window.add_command(Vocab.distribute_parameter) if @command_window.oy > 0 @command_window.oy -= Window_Base::WLH end @command_window.index = @menu_index end end
Goldenflame
Citadin Lv.7
Age : 31 Inscrit le : 13/05/2008 Messages : 151
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 11:13
class Window_DistributeParameterActor < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 # actor : アクター #-------------------------------------------------------------------------- def initialize(x, y, actor) super(x, y, Graphics.width, WLH + 32) @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear draw_actor_name(@actor, 4, 0) draw_actor_level(@actor, 140, 0) draw_actor_rp(@actor, 240, 0) end end
gain = @actor.gain_parameter_list[type] value = @actor.distribute_cost(type) self.contents.draw_text(x + 120, y, 40, WLH, value, 2) value = sprintf("%+d", @actor.distribute_gain(type)) self.contents.draw_text(x + 190, y, 40, WLH, value, 2) value = sprintf("%3d/%3d", @actor.distributed_count(type), gain[2]) self.contents.draw_text(x + 236, y, 80, WLH, value, 2) self.contents.font.color = normal_color end end
class Window_DistributeParameterStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize(actor) dx = Graphics.width / 2 + 80 off_h = (WLH + 32) * 2 super(dx, off_h, Graphics.width - dx, Graphics.height - off_h) @actor = actor refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(0, 0, width - 32, WLH, "パラメータ", 1) self.contents.font.color = normal_color dy = WLH gain_params = @actor.gain_parameter_list KGC::DistributeParameter::PARAMS.each { |param| next if gain_params[param] == nil draw_parameter(0, dy, param) dy += WLH } end #-------------------------------------------------------------------------- # ○ 能力値の描画 # x : 描画先 X 座標 # y : 描画先 Y 座標 # type : 能力値の種類 #-------------------------------------------------------------------------- def draw_parameter(x, y, type) case type when :maxhp name = Vocab.hp value = @actor.maxhp when :maxmp name = Vocab.mp value = @actor.maxmp when :atk name = Vocab.atk value = @actor.atk when :def name = Vocab.def value = @actor.def when :spi name = Vocab.spi value = @actor.spi when :agi name = Vocab.agi value = @actor.agi when :hit name = Vocab.hit value = @actor.hit when :eva name = Vocab.eva value = @actor.eva when :cri name = Vocab.cri value = @actor.cri else return end draw_actor_distribute_gauge(@actor, type, x + 106, y, 48) self.contents.font.color = system_color self.contents.draw_text(x + 4, y, 96, WLH, name) self.contents.font.color = normal_color self.contents.draw_text(x + 106, y, 48, WLH, value, 2) end end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
Goldenflame
Citadin Lv.7
Age : 31 Inscrit le : 13/05/2008 Messages : 151
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 11:15
class Scene_Menu < Scene_Base if KGC::DistributeParameter::USE_MENU_DISTRIBUTE_PARAMETER_COMMAND #-------------------------------------------------------------------------- # ● コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias create_command_window_KGC_DistributeParameter create_command_window def create_command_window create_command_window_KGC_DistributeParameter
return if $imported["CustomMenuCommand"]
@__command_distribute_parameter_index = @command_window.add_command(Vocab.distribute_parameter) if @command_window.oy > 0 @command_window.oy -= Window_Base::WLH end @command_window.index = @menu_index end end #-------------------------------------------------------------------------- # ● コマンド選択の更新 #-------------------------------------------------------------------------- alias update_command_selection_KGC_DistributeParameter update_command_selection def update_command_selection call_distribute_parameter_flag = false if Input.trigger?(Input::C) case @command_window.index when @__command_distribute_parameter_index # パラメータ振り分け call_distribute_parameter_flag = true end end
# パラメータ振り分け画面に移行 if call_distribute_parameter_flag if $game_party.members.size == 0 Sound.play_buzzer return end Sound.play_decision start_actor_selection return end
update_command_selection_KGC_DistributeParameter end #-------------------------------------------------------------------------- # ● アクター選択の更新 #-------------------------------------------------------------------------- alias update_actor_selection_KGC_DistributeParameter update_actor_selection def update_actor_selection if Input.trigger?(Input::C) $game_party.last_actor_index = @status_window.index Sound.play_decision case @command_window.index when @__command_distribute_parameter_index # パラメータ振り分け $scene = Scene_DistributeParameter.new( @status_window.index, @__command_distribute_parameter_index, Scene_DistributeParameter::HOST_MENU) return end end
update_actor_selection_KGC_DistributeParameter end end
class Scene_File < Scene_Base #-------------------------------------------------------------------------- # ● セーブデータの読み込み # file : 読み込み用ファイルオブジェクト (オープン済み) #-------------------------------------------------------------------------- alias read_save_data_KGC_DistributeParameter read_save_data def read_save_data(file) read_save_data_KGC_DistributeParameter(file)
KGC::Commands.check_distribution_values Graphics.frame_reset end end
Hey voila ! encore merci a KGC Software !
Dernière édition par Goldenflame le Jeu 26 Juin 2008 - 14:40, édité 2 fois
Soshi
Vagabond Lv.5
Avertissements : 3Inscrit le : 15/03/2008 Messages : 80
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 13:29
Merci mais j'ai une erreur à la ligne 921, syntax error.
la ligne en question :
Citation :
end
...
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 15:40
Supprime le end et voila xD .
Bon script
OR-K
Prêtre Lv13
Age : 32 Inscrit le : 19/06/2008 Messages : 877
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 15:43
Hé pas bête le script! Merci du partage :YES:
Kamachi-Kuno
Seigneur Lv.18
Age : 31 Inscrit le : 06/06/2008 Messages : 2005
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 15:49
Merci du script !
Goldenflame
Citadin Lv.7
Age : 31 Inscrit le : 13/05/2008 Messages : 151
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 16:33
De rien
Je pouvais bien donner sa car avec tout les scripts que j'ai demander ! Malgrés que l'on ne ma jamais répondu :/
Soshi
Vagabond Lv.5
Avertissements : 3Inscrit le : 15/03/2008 Messages : 80
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 16:42
fabY a écrit:
Supprime le end et voila xD .
Sauf qu'après j'ai une autre erreur etc... C'est pas la meilleur façon de faire planter un script ?
Vous avez pas cette erreur vous ?
Goldenflame
Citadin Lv.7
Age : 31 Inscrit le : 13/05/2008 Messages : 151
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 16:47
Si ( j'ai la même erreur :/ ) mince qui peut nous aider ?
fabY
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 18:17
Qu'est ce que t'est malin Goldenflame xDDD.
Nous poster un script pour qu'on se rende compte qu'il ne marche pas et que l'on puisse t'aider x). J'avoue j'aurai jamais pensé à ça, bravo . Bon, je suis pas scripteur alors je pourrai surement pas résoudre le probl...
Invité
Invité
Sujet: Re: [VX] Distribution de l'expérience Mar 24 Juin 2008 - 18:20
yark c'est tout un statagème
Gothor
Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 7:38
la flemme de lire le script... essayez de rajouter un end avant ou après le end bugger en question....
Vorg-sama
Voyageur Lv.10
Inscrit le : 16/03/2008 Messages : 408
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 9:25
Gothor a écrit:
la flemme de lire le script... essayez de rajouter un end avant ou après le end bugger en question....
Super, quel est l'intérêt de ton poste ? Si tu as la flemme de lire bah c'est bien, pas la peine de nous le partager, tu pouvais simplement dire que tu n'avais pas envie d'aider ...
De plus quel est l'intérêt d'ajouter un end après ou avant apart de bousiler le script ...
Gothor
Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 9:50
le scripteur peut avoir oublier un end... ça m'est déjà arrivé de nombreuses fois ce genre de situation...
et toi? as-tu lu le script en entier???
Vorg-sama
Voyageur Lv.10
Inscrit le : 16/03/2008 Messages : 408
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 10:04
Non, je ne suis pas scripteur donc je ne pourrais pas l'aider davantage.
Mais moi, je ne partage pas à tout le monde le fait que je n'ai pas lu le script car j'ai la flemme, bien que je suis scripteur et que je peux aider comme tu l'as si bien fait ...
Gothor
Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 10:11
Alors cessons donc le flood, et aide...
Vorg-sama
Voyageur Lv.10
Inscrit le : 16/03/2008 Messages : 408
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 10:32
Comme je l'ai dit plus haut, je ne pourrais pas aider davantage comme je ne suis pas scripteur ...
Gothor
Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 11:22
Bon, en fait ligne 921, il suffit d'enlever un end... mais ça me fait une autre erreur, je vais chercher un peu...
LOD
Illusionniste Lv.12
Age : 30 Inscrit le : 16/03/2008 Messages : 666
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 12:51
Haaa trop long comme script.
Bon normal que le codeur est oublier des End ou fait des erreurs , a ce niveau c'est normal xD. Bonne chance les gars!
Kamachi-Kuno
Seigneur Lv.18
Age : 31 Inscrit le : 06/06/2008 Messages : 2005
Sujet: Re: [VX] Distribution de l'expérience Mer 25 Juin 2008 - 18:23
Erf dommage j'en avais besoin. Une fois que j'ai supprimer le "end" à la ligne 921, à la ligne 849 ils me disent aussi qu'il y a erreur.
if $game_temp.next_scene == :distribute_parameter
Gothor
Chevalier Lv.17
Age : 31 Inscrit le : 27/04/2008 Messages : 1835
Sujet: Re: [VX] Distribution de l'expérience Jeu 26 Juin 2008 - 9:31