Poulet trizo Lv.3
Age : 29 Inscrit le : 31/10/2011 Messages : 31
| Sujet: [Résolu] Problème avec un script de création de magazin de compétence Jeu 17 Mai 2012 - 20:25 | |
| Bonjours, bonsoir à tous !! Je voudrais avoir de l'aide sur un petit problème, s'il vous plait. Voilà, pour mon jeu, j'utillise un script de Nechigawara Sanzenin pour faire un magazin qui vent des compétences. Mais voilà, lorque je lance mon évent, mon jeu crash et me laisse pour seul explication: line 294: NoMethodError occurred undefined method 'size' for nil:NilClass je décide donc d'aller voir le problème et je suis collé à ce problème car à la ligne 294 il est écrit: - Code:
-
for i in 0...@skill_shop_goods.size Je ne vois pas où est l'erreur, du à mes talents très mauvais de scripteur. je joins également le script complet, pour vous permettre de trouver l'erreur. - Code:
-
============================================================================== # Skill Shop for RMVX Ver 3.1 #============================================================================== #MediaFire Hosting# By Nechigawara Sanzenin # WARNING!! : This script can use on RPG Maker VX Only!! (XP Not Support) #============================================================================== # Buy Skill Option For RMVX #============================================================================== #Version Log #============================================================================== #2.0 Add Level requirement - Change Hero Select Window #3.0 Change How to set Price , Add wait Level Up option #3.0 Fixed Bug, Edit Price Key Word #============================================================================== =begin
How to Use:
You will add "$skill_shop =[Id of Skill]" To Call Script to set id of skill for sell. You will add "$scene = Scene_Skill_Shop.new" To Call Skill Shop Windows.
Example: $skill_shop = [1,2,3,6,7] $scene = Scene_Skill_Shop.new
You can turn on/off option under "# Setting". You can set text to use in Skill Shop under "# Learn Text". You can add "[p-Price-]" for set Skill Price at Note in Skill Database. Example : For set Price to 150
[p150]
You can set Skill that the fighter each person can learn under "# Hero Data".
You will setting look like this in Hero Data [ID of skill, Level requirement for learn]
Example : if you want actor id 1 can learn skill id 1 at Lv 4 and can learn skill id 2 at lv 3. You will setting look like this
1 => [ #Id of Actor [1,4],[2,3], ],
=end #============================================================================== #module SKILL_SHOP #==============================================================================
# Brève modification par Samarium # Affichage possible uniquement des characters sans le texte. # module SKILL_SHOP # Setting Wait_Lv_Up = false # Wait 1 Lv up for use skill from buy Show_cha = true # Show Charactor Graphic in Select Window Show_cha_name = false # Ajout : Permet d'afficher les noms des héros # Learn Text How_Learn = "Qui peut l'appendre ?" Can_Learn = "Peut apprendre" Can_Learn_Lv = "Il faut être au Nv" Cant_Learn = "----" Learnt = "Appris" Teach = "Apprendre" Cancel = "Annuler" Next_Lv = "Prochain Niveau" Can_use = "%s peut être utilisé !" # Price Data For Non Set PRICE = 200 # Hero Data SKILL_BUY = { # Add what skill can hero buy Here # [ID of skill,Level] 1 => [ #Id of Actor [1,1],[2,3],[3,1], ], 2 => [ #Id of Actor [1,1],[2,3],[3,1], ], # End } # Add Price def self.skill_price(id) text = $data_skills[id].note text.scan(/\[p([0-9]+)\]/) if $1.to_i != 0 then price = $1.to_i else price = PRICE end return price end # Add Hero id def self.skill_buy(id) if SKILL_BUY.include?(id) return SKILL_BUY[id] else return [] end end end #============================================================================== #class Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- def setup(actor_id) actor = $data_actors[actor_id] @actor_id = actor_id @name = actor.name @character_name = actor.character_name @character_index = actor.character_index @face_name = actor.face_name @face_index = actor.face_index @class_id = actor.class_id @weapon_id = actor.weapon_id @armor1_id = actor.armor1_id
@armor2_id = actor.armor2_id @armor3_id = actor.armor3_id @armor4_id = actor.armor4_id @level = actor.initial_level @exp_list = Array.new(101) make_exp_list @exp = @exp_list[@level] @skills = [] @le_skills = [] @le = [] for i in self.class.learnings learn_skill(i.skill_id) if i.level <= @level end clear_extra_values recover_all end #-------------------------------------------------------------------------- def le_skills result = [] for i in @le_skills result.push($data_skills[i]) end return result end #-------------------------------------------------------------------------- def learn_le_skill(skill_id) unless skill_learn?($data_skills[skill_id]) @le_skills.push(skill_id) @le_skills.sort! end end #-------------------------------------------------------------------------- def forget_skill(skill_id) @skills.delete(skill_id) @le_skills.delete(skill_id) end #-------------------------------------------------------------------------- def skill_learn?(skill) if @skills.include?(skill.id) return true elsif @le_skills.include?(skill.id) return true else return false end end #-------------------------------------------------------------------------- def le_learn_skill(skill_id) unless @skills.include?(skill_id) @skills.push(skill_id) @skills.sort! end end #-------------------------------------------------------------------------- def skill_can_use?(skill) return false if @le_skills.include?(skill.id) return false unless skill_learn?(skill) return super end #-------------------------------------------------------------------------- def learn?(skill) learn = skill_learn?(skill) if learn == true return false else return true end end #-------------------------------------------------------------------------- def le_skill?(skill) return @le_skills.include?(skill.id) end #-------------------------------------------------------------------------- def display_level_up(new_skills) $game_message.new_page text = sprintf(Vocab::LevelUp, @name, Vocab::level, @level) $game_message.texts.push(text) for skill in new_skills unless @le.include?(skill.id) text = sprintf(Vocab::ObtainSkill, skill.name) $game_message.texts.push(text) end end for i in 0...@le.size id = @le[i] name = $data_skills[id].name text = sprintf(SKILL_SHOP::Can_use, name) $game_message.texts.push(text) end @le = [] end #-------------------------------------------------------------------------- alias inc_level_up level_up def level_up inc_level_up @le = [] for i in 0...@le_skills.size id = @le_skills[i] le_learn_skill(id) @le.push(id) end @le_skills = [] end end #============================================================================== #class Window_Skill_ShopBuy #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- def refresh @data = [] for skill in @actor.skills @data.push(skill) if skill.id == @actor.last_skill_id self.index = @data.size - 1 end end for skill in @actor.le_skills @data.push(skill) 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) skill = @data[index] if skill != nil rect.width -= 4 enabled = @actor.skill_can_use?(skill) draw_item_name(skill, rect.x, rect.y, enabled) if @actor.le_skill?(skill) text = SKILL_SHOP::Next_Lv else text = @actor.calc_mp_cost(skill) end self.contents.draw_text(rect, text, 2) end end end #============================================================================== #class Window_Skill_ShopBuy #============================================================================== class Window_Skill_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 304, 304) @skill_shop_goods = $skill_shop refresh self.index = 0 end #-------------------------------------------------------------------------- def skill return @data[self.index] end #-------------------------------------------------------------------------- def refresh @data = [] for i in 0...@skill_shop_goods.size skill = $data_skills[@skill_shop_goods[i]] if skill != nil @data.push(skill) end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- def draw_item(index) skill = @data[index] price = SKILL_SHOP.skill_price(skill.id) enabled = (price <= $game_party.gold) rect = item_rect(index) self.contents.clear_rect(rect) draw_item_name(skill, rect.x, rect.y, enabled) rect.width -= 4 self.contents.draw_text(rect, price, 2) end #-------------------------------------------------------------------------- def update_help @help_window.set_text(skill == nil ? "" : skill.description) end end
#============================================================================== #class Window_Skill_ShopStatus #============================================================================== class Window_Skill_ShopStatus < Window_Selectable #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 240, 304) @item = nil refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.members.size if @item != nil self.contents.font.color = system_color self.contents.draw_text(4, 0, 200, WLH, SKILL_SHOP::How_Learn) for actor in $game_party.members x = 4 y = WLH * (2 + actor.index * 2) draw_actor_can_learn(actor, x, y) end end end #-------------------------------------------------------------------------- def draw_actor_can_learn(actor, x, y) can = false lv = false ac_lv = 0 can_learn = SKILL_SHOP.skill_buy(actor.id) id = @item.id for i in 0...can_learn.size if can_learn[i][0] == id can = true if can_learn[i][1] <= actor.level lv = true else lv = false ac_lv = can_learn[i][1] end break else can = false end end enabled = (can and lv and actor.learn?(@item)) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 if SKILL_SHOP::Show_cha name = actor.character_name index = actor.character_index # Modification ------------- unless SKILL_SHOP::Show_cha_name size = 0 else size = contents.text_size(actor.name).width end draw_character(name, index, x + 20 + size , y + 30) end self.contents.draw_text(x, y, 200, WLH, actor.name) if SKILL_SHOP::Show_cha_name # -------------------------- if can == false text = SKILL_SHOP::Cant_Learn elsif can == true and lv == false ac = ac_lv.to_s text = SKILL_SHOP::Can_Learn_Lv + " " + ac + "+" elsif actor.learn?(@item) == false text = SKILL_SHOP::Learnt else text = SKILL_SHOP::Can_Learn end self.contents.draw_text(x, y, 200, WLH, text, 2) end #-------------------------------------------------------------------------- def item=(item) if @item != item @item = item refresh end end #-------------------------------------------------------------------------- def update_cursor if @index < 0 self.cursor_rect.empty elsif @index < @item_max y = WLH * (2 + @index * 2) unless SKILL_SHOP::Show_cha self.cursor_rect.set(0, y , contents.width, WLH) else self.cursor_rect.set(0, y - 4, contents.width,34) end end end end #============================================================================== #class Scene_Skill_Shop #============================================================================== class Scene_Skill_Shop < Scene_Base #-------------------------------------------------------------------------- def start super create_menu_background create_command_window @viewport = Viewport.new(0, 0, 544, 416) @help_window = Window_Help.new @gold_window = Window_Gold.new(384, 56) @dummy_window = Window_Base.new(0, 112, 544, 304) @buy_window = Window_Skill_ShopBuy.new(0, 112) @buy_window.active = false @buy_window.visible = false @buy_window.help_window = @help_window @status_window = Window_Skill_ShopStatus.new(304, 112) @status_window.visible = false @status_window.active = false end #-------------------------------------------------------------------------- def terminate super dispose_menu_background dispose_command_window @help_window.dispose @gold_window.dispose @dummy_window.dispose @buy_window.dispose @status_window.dispose end #-------------------------------------------------------------------------- def update super update_menu_background @help_window.update @command_window.update @gold_window.update @dummy_window.update @buy_window.update @status_window.update if @command_window.active update_command_selection elsif @buy_window.active update_buy_selection elsif @status_window.active update_target_selection end end #-------------------------------------------------------------------------- def create_command_window s1 = SKILL_SHOP::Teach s2 = SKILL_SHOP::Cancel @command_window = Window_Command.new(384, [s1, s2], 2) @command_window.y = 56 end #-------------------------------------------------------------------------- def dispose_command_window @command_window.dispose end #-------------------------------------------------------------------------- def update_command_selection @help_window.set_text("") if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) case @command_window.index when 0 Sound.play_decision @command_window.active = false @dummy_window.visible = false @buy_window.active = true @buy_window.visible = true @buy_window.refresh @status_window.visible = true when 1 Sound.play_decision $scene = Scene_Map.new end end end #-------------------------------------------------------------------------- def update_buy_selection @status_window.item = @buy_window.skill if Input.trigger?(Input::B) Sound.play_cancel @command_window.active = true @dummy_window.visible = true @buy_window.active = false @buy_window.visible = false @status_window.visible = false @status_window.item = nil return end if Input.trigger?(Input::C) @item = @buy_window.skill @price = SKILL_SHOP.skill_price(@item.id) enabled = (@price <= $game_party.gold) if not enabled Sound.play_buzzer else Sound.play_decision show_target_window end end end #-------------------------------------------------------------------------- def update_target_selection if Input.trigger?(Input::B) Sound.play_cancel hide_target_window elsif Input.trigger?(Input::C) @actor = $game_party.members[@status_window.index] can = false lv = false can_learn = SKILL_SHOP.skill_buy(@actor.id) id = @item.id for i in 0...can_learn.size if can_learn[i][0] == id can = true if can_learn[i][1] <= @actor.level lv = true else lv = false end break else can = false end end enabled = (can and lv and @actor.learn?(@item)) if not enabled Sound.play_buzzer else learn_target(@item.id) end end end #-------------------------------------------------------------------------- def learn_target(skill_id) Sound.play_shop unless SKILL_SHOP::Wait_Lv_Up @actor.learn_skill(skill_id) else @actor.learn_le_skill(skill_id) end $game_party.lose_gold(@price) @buy_window.refresh @gold_window.refresh @status_window.refresh hide_target_window end #-------------------------------------------------------------------------- def show_target_window @buy_window.active = false @status_window.active = true @status_window.index = 0 end #-------------------------------------------------------------------------- def hide_target_window @buy_window.active = true @status_window.active = false @status_window.index =- 1 end end Je vous remercis d'avance pour votre aide. Amicalement Gunslinger
Dernière édition par Gunslinger le Ven 18 Mai 2012 - 13:27, édité 1 fois |
|
Age : 28 Inscrit le : 30/12/2009 Messages : 1067
| Sujet: Re: [Résolu] Problème avec un script de création de magazin de compétence Jeu 17 Mai 2012 - 22:52 | |
| Est-ce que t'entre les bonnes choses dans ton appel de script ? Le $skill_shop = [ID des skills, ...] et le $scene = Scene_Skill_Shop.new ? |
|
Poulet trizo Lv.3
Age : 29 Inscrit le : 31/10/2011 Messages : 31
| Sujet: Re: [Résolu] Problème avec un script de création de magazin de compétence Ven 18 Mai 2012 - 13:26 | |
| Je te remercis Biward !!
J'ai revérifié mon appel de script et il me manquait bien skill_shop.
Cela marche impec, merci encore !! |
|
Habitant Lv.6
Inscrit le : 09/06/2011 Messages : 111
| Sujet: Re: [Résolu] Problème avec un script de création de magazin de compétence Ven 18 Mai 2012 - 19:45 | |
| C'est pas possible de le faire en events ? Avec l'option "choix" et "modifier les compétences" ? |
|
| Sujet: Re: [Résolu] Problème avec un script de création de magazin de compétence | |
| |
|