|
|
| Objets en inventaire comme Diablo | |
| Auteur | Message |
---|
nara bakuraMatière
Messages : 129 Date d'inscription : 20/06/2007
Caractéristiques du membre Evolution: Atome Job: XP: (20/20)
| Sujet: Objets en inventaire comme Diablo Sam 30 Juin 2007 - 11:52 | |
| Version : BETA Créateur : DarkSchneider de www.rpg2s.net Introduction Création d'un inventaire dans une grille. Pour ceux qui n'ont jamais joué à Diablo, il y a un espace réservé pour l'inventaire en une grille. Chaque objet prend un certaine place sur la grille. Dans ce script, les objets prennent une case, les armes 3 en verticale et les boucliers 2x3. Options Chaque jour a son propre inventaire (les objets sont ajoutés d'abord au héros n°1, puis au n°2,...). Vous pouvez arranger les objets comme vous le voulez. En cours de résolution Lâcher les objets sur la carte Compatibilité avec regroupement et détails Possibilité de choisir individuellement la taille prise pour armes/armures/objets Instructions Juste à mettre au-dessus de MAIN. Tester le jeu et ouvrir "Objets" dans le menu. Printscreen - Code:
-
#============================================================================== # Item System Diablo Style #------------------------------------------------------------------------------ # By DarkSchneider # www.rpg2s.net #------------------------------------------------------------------------------ # Credit to Schwarz for draw_line # traduit par Corwin : http://www.rpgmxp.ch # publié sur RPGmxp Studio II : 06.06.2007 #==============================================================================
class Scene_Item2 def initialize(actor_index = 0) @actor_index = actor_index end def main # Make help window, item window s1 = "Utiliser" s2 = "Bouger" s3 = "Jeter" @command_window = Window_Command.new(193, [s1, s2 , s3]) @command_window.y = 64 @help_window = Window_Help.new @grid = Window_Grid.new(@actor_index) @grid.active = false # Associate help window @grid.help_window = @help_window # Make target window (mets en invisible / inactif) @target_window = Window_Target.new @target_window.visible = false @target_window.active = false @window_pc = Window_Base.new(0,192,193,287) @window_pc.contents = Bitmap.new(161,255) @window_pc.draw_actor_name($game_party.actors[@actor_index], 10, 0) @window_pc.draw_actor_picture($game_party.actors[@actor_index], 80, 250) # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze @cursor_icon.dispose if @cursor_icon != nil # Dispose of windows @command_window.dispose @help_window.dispose #@item_window.dispose @target_window.dispose @grid.dispose @window_pc.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Update windows @command_window.update @help_window.update @target_window.update @grid.update if @command_window.active update_command return end # Si la fenêtre est inactive : call update_item if @grid.active case @grid.mode when 0 update_usa when 1 @cursor_icon = Cursor_Icon.new if @cursor_icon == nil @cursor_icon.visible = false update_muovi when 2 update_lascia when 3 @cursor_icon.update update_muovi2 end return end # si la fenêtre cible active: call update_target if @target_window.active update_target return end end def update_command # si le bouton B est pressé if Input.trigger?(Input::B) # jouer cancel SE $game_system.se_play($data_system.cancel_se) # retour au menu $scene = Scene_Menu.new(0) return end if Input.trigger?(Input::C) # choix selon curseur case @command_window.index when 0 # UTILISER # jouez decision SE $game_system.se_play($data_system.decision_se) @command_window.active = false @grid.active = true @grid.set = 0 @grid.mode = @command_window.index when 1 # BOUGER # jouer decision SE $game_system.se_play($data_system.decision_se) # mettre status window active @command_window.active = false @grid.active = true @grid.set = 0 @grid.mode = @command_window.index when 2 # JETER # jouer decision SE $game_system.se_play($data_system.decision_se) # mettre status window active @command_window.active = false @grid.active = true @grid.set = 0 @grid.mode = @command_window.index end return end end #-------------------------------------------------------------------------- # * Frame Update (quand item window est active) #-------------------------------------------------------------------------- def update_usa # si le bouton B est pressé if Input.trigger?(Input::B) # jouer cancel SE $game_system.se_play($data_system.cancel_se) # retour au Menu @command_window.active = true @grid.active = false @grid.set = - 1 return end # If C button was pressed if Input.trigger?(Input::C) # Get currently selected data on the item window @item = @grid.item # If not a use item unless @item.is_a?(RPG::Item) # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # If it can't be used unless $game_party.item_can_use?(@item.id) # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play decision SE $game_system.se_play($data_system.decision_se) # If effect scope is an ally if @item.scope >= 3 # Activate target window @grid.active = false #@target_window.x = (@item_window.index + 1) % 2 * 304 @target_window.visible = true @target_window.active = true # Set cursor position to effect scope (single / all) if @item.scope == 4 || @item.scope == 6 @target_window.index = -1 else @target_window.index = 0 end # If effect scope is other than an ally else # If command event ID is valid if @item.common_event_id > 0 # Command event call reservation $game_temp.common_event_id = @item.common_event_id # Play item use SE $game_system.se_play(@item.menu_se) # If consumable if @item.consumable # Decrease used items by 1 $game_party.lose_item(@item.id, 1, false) # Draw item window item @grid.delete_item end # Switch to map screen $scene = Scene_Map.new return end end return end end #-------------------------------------------------------------------------- # * Frame Update (when target window is active) #-------------------------------------------------------------------------- def update_target # If B button was pressed if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # If unable to use because items ran out unless $game_party.item_can_use?(@item.id) # Remake item window contents @grid.refresh end # Erase target window @grid.active = true @target_window.visible = false @target_window.active = false return end # If C button was pressed if Input.trigger?(Input::C) # If items are used up if @grid.item_del? # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # If target is all if @target_window.index == -1 # Apply item effects to entire party used = false for i in $game_party.actors used |= i.item_effect(@item) end end # If single target if @target_window.index >= 0 # Apply item use effects to target actor target = $game_party.actors[@target_window.index] used = target.item_effect(@item) end # If an item was used if used # Play item use SE $game_system.se_play(@item.menu_se) # If consumable if @item.consumable # Decrease used items by 1 $game_party.lose_item(@item.id, 1, false) # Redraw item window item @grid.delete_item end # Remake target window contents @target_window.refresh # If all party members are dead if $game_party.all_dead? # Switch to game over screen $scene = Scene_Gameover.new return end # If common event ID is valid if @item.common_event_id > 0 # Common event call reservation $game_temp.common_event_id = @item.common_event_id # Switch to map screen $scene = Scene_Map.new return end end # If item wasn't used unless used # Play buzzer SE $game_system.se_play($data_system.buzzer_se) end return end end def update_muovi if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to menu screen @command_window.active = true @grid.active = false @grid.set = - 1 return end if Input.trigger?(Input::C) if @grid.item != nil @grid.get_item bitmap = Bitmap.new(32,32) x = 4 + (@grid.cursor_rect.width == 32 ? 0 : 18) y = 4 + (@grid.cursor_rect.height == 32 ? 0 : 32) bitmap.blt(0,0,@grid.contents,Rect.new(@grid.cursor_rect.x + x, @grid.cursor_rect.y + y,@grid.cursor_rect.width,@grid.cursor_rect.height))
@cursor_icon.refresh(bitmap, @grid.item_saved[1]) @grid.cursor_rect.width = @cursor_icon.bitmap.width @grid.cursor_rect.height = @cursor_icon.bitmap.height @cursor_icon.x = @grid.cursor_rect.x + @grid.x + 16 @cursor_icon.y = @grid.cursor_rect.y + @grid.y + 16 @cursor_icon.visible = true @grid.delete_item
@grid.mode = 3 end return end end def update_lascia if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to menu screen @command_window.active = true @grid.active = false @grid.set = - 1 return end if Input.trigger?(Input::C) if @grid.item != nil @grid.delete_item end return |
| | | nara bakuraMatière
Messages : 129 Date d'inscription : 20/06/2007
Caractéristiques du membre Evolution: Atome Job: XP: (20/20)
| Sujet: Re: Objets en inventaire comme Diablo Sam 30 Juin 2007 - 12:02 | |
| - Code:
-
update_muovi2 @grid.cursor_rect.width = @cursor_icon.bitmap.width @grid.cursor_rect.height = @cursor_icon.bitmap.height @cursor_icon.x = @grid.cursor_rect.x + @grid.x + 16 @cursor_icon.y = @grid.cursor_rect.y + @grid.y + 16 if @grid.empty? @cursor_icon.blink_on @cursor_icon.tone.set(0,0,0,0) else @cursor_icon.blink_off @cursor_icon.tone.set(0,0,0,255) end if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to menu screen @grid.redraw_item(false) @grid.mode = 1 return end if Input.trigger?(Input::C) if @grid.empty? @grid.redraw_item @cursor_icon.visible = false @grid.mode = 1 end return end end end
class Window_Selectable < Window_Base alias old_initialize initialize def initialize(x, y, width, height) old_initialize(x, y, width, height) if self.is_a?(Window_Grid) @x = 0 @y = 0 end end alias old_update update def update if !self.is_a?(Window_Grid) old_update return end super item = $game_party.actors[@actor_index].item_grid # If cursor is movable if self.active and @item_max > 0 and @x >= 0 # If pressing down on the directional buttons if Input.repeat?(Input::DOWN) @y = -1 if @y == item.size - (self.cursor_rect.height == 96 ? 3 : 1) @y += 2 if item[@y][@x][1] == "w" or item[@y][@x][1] == "a" if item[@y + 1][@x][1] == "r" and item[@y + 1][@x - 1][1] == "a" @x -= 1 end @y += 1 $game_system.se_play($data_system.cursor_se) end # If the up directional button was pressed if Input.repeat?(Input::UP) @y = item.size if @y - 1 == -1 @y -= 2 if item[@y - 1][@x][1] == "e" or item[@y - 1][@x][1] == "r" @x -= 1 if item[@y - 1][@x - 1][1] == "a" @y -= 1 $game_system.se_play($data_system.cursor_se) end # If the right directional button was pressed if Input.repeat?(Input::RIGHT) if @x + (self.cursor_rect.width == 64 ? 2 : 1) == item[@y].size @x = 0 @y -= 1 if item[@y - 1][@x][1] == "a" @y -= 2 if item[@y - 2][@x][1] == "a" else @x += 1 if item[@y][@x][1] == "a" if item[@y][@x + 1][1] == "r" @y -= 1 if item[@y - 1][@x + 1][1] == "a" @y -= 2 if item[@y - 2][@x + 1][1] == "a" end if item[@y][@x + 1][1] == "e" @y -= 1 @y -= 1 if item[@y - 1][@x + 1][1] == "w" end @x += 1 end $game_system.se_play($data_system.cursor_se) end # If the left directional button was pressed if Input.repeat?(Input::LEFT) @x = item[@y].size if @x - 1 == -1 if item[@y][@x - 1][1] == "r" @x -= 1 @y -= 1 if item[@y - 1][@x - 1][1] == "a" @y -= 2 if item[@y - 2][@x - 1][1] == "a" end if item[@y][@x - 1][1] == "e" @y -= 1 @y -= 1 if item[@y - 1][@x - 1][1] == "w" end @x -= 1 $game_system.se_play($data_system.cursor_se) end end # Update help text (update_help is defined by the subclasses) if self.active and @help_window != nil update_help end # Update cursor rectangle update_cursor_rect end end
class Window_Grid < Window_Selectable attr_accessor :mode attr_reader :item_saved def initialize(actor_index) super(192,64,448,416) self.contents = Bitmap.new(width - 32, height - 32) #icone objets self.opacity = 0 @window = Window_Base.new(x , y , width, height) #grille blanche @window.contents = Bitmap.new(width - 32, height - 32) @window.z = self.z - 4 @grid_color = Sprite.new #couleur des objets @grid_color.bitmap = Bitmap.new(width - 32, height - 32) @grid_color.x = self.x + 16 @grid_color.y = self.y + 16 @grid_color.z = @window.z + 2 @actor_index = actor_index @mode = 0 @mini_help = Mini_Help.new self.set = -1 n = self.contents.width / 32 m = self.contents.height / 32 @column_max = n draw_grid refresh end def draw_grid # pour changer la couleur : @window.contents.fill_rect(0, 0, width - 32, height - 32, Color.new(191,96,0)) i = 0 color = Color.new(0,0,0) while i < self.contents.height draw_line(0, i, self.contents.width, i, color) i += 32 end i = 0 while i < self.contents.width draw_line(i, 0, i, self.contents.width, color) i += 32 end end def draw_line(sx, sy, ex, ey, color) rad = Math.atan2(ey-sy, ex-sx) dx = Math.cos(rad) dy = Math.sin(rad) while (sx - ex).abs > 1 || (sy - ey).abs > 1 sx += dx sy += dy @window.contents.set_pixel(sx, sy, color) end end def refresh @item_max = 0 item = $game_party.actors[@actor_index].item_grid for i in 0..item.size - 1 for j in 0..item[i].size - 1 if item[i][j][0]!= 0 and item[i][j][1] != "r" and item[i][j][1] != "e" @item_max += 1 end end end for i in 0..item.size - 1 for j in 0..item[i].size - 1 draw_item(item[i][j][0], item[i][j][1], i , j) end |
| | | nara bakuraMatière
Messages : 129 Date d'inscription : 20/06/2007
Caractéristiques du membre Evolution: Atome Job: XP: (20/20)
| Sujet: Re: Objets en inventaire comme Diablo Sam 30 Juin 2007 - 12:02 | |
| - Code:
-
update_cursor_rect # If cursor position is less than 0 if @x < 0 self.cursor_rect.empty return end # Calculate cursor width case $game_party.actors[@actor_index].item_grid[@y][@x][1] when "i" cursor_width = 32 cursor_height = 32 when "w" cursor_width = 32 cursor_height = 96 when "a" cursor_width = 64 cursor_height = 96 else cursor_width = 32 cursor_height = 32 end # Calculate cursor coordinates x = @x * 32 y = @y * 32 # Update cursor rectangle self.cursor_rect.set(x, y, cursor_width, cursor_height) end def delete_item case $game_party.actors[@actor_index].item_grid[@y][@x][1] when "i" @grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 31, 31, Color.new(0,0,0,0)) self.contents.fill_rect(@x*32, @y*32, 32, 32, Color.new(0,0,0,0)) $game_party.actors[@actor_index].item_grid[@y][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y][@x][1] = "" when "w" @grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 31, 95, Color.new(0,0,0,0)) self.contents.fill_rect(@x*32, @y*32 + 4 + 32, 32, 32, Color.new(0,0,0,0)) $game_party.actors[@actor_index].item_grid[@y][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y][@x][1] = "" $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "" $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "" when "a" @grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 63, 95, Color.new(0,0,0,0)) self.contents.fill_rect(@x*32 + 18, @y*32 + 4 + 32, 32, 32, Color.new(0,0,0,0)) $game_party.actors[@actor_index].item_grid[@y][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y][@x][1] = "" $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "" $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = 0 $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "" $game_party.actors[@actor_index].item_grid[@y][@x + 1][0] = 0 $game_party.actors[@actor_index].item_grid[@y][@x + 1][1] = "" $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][0] = 0 $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] = "" $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][0] = 0 $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] = "" end end def item i = $game_party.actors[@actor_index].item_grid[@y][@x][0] case $game_party.actors[@actor_index].item_grid[@y][@x][1] when "i" return $data_items[i] when "w" return $data_weapons[i] when "a" return $data_armors[i] else return nil end end def item_del? if $game_party.actors[@actor_index].item_grid[@y][@x][0] == 0 # Unusable return true else return false end end def dispose super @window.dispose @grid_color.dispose @mini_help.dispose end def update_help @mini_help.contents.font.color = (($game_party.item_can_use?(item.id) and item.is_a?(RPG::Item))? normal_color : disabled_color) @help_window.set_text(item == nil ? "" : item.description) @mini_help.set_text(item == nil ? "" : item.name) @mini_help.visible = false if item == nil @mini_help.x = self.cursor_rect.x + self.cursor_rect.width + 192 + (self.contents.width - self.cursor_rect.x - self.cursor_rect.width < @mini_help.width ? -@mini_help.width : 18) @mini_help.y = self.cursor_rect.y + self.cursor_rect.height + 64 + (self.contents.height - self.cursor_rect.y - self.cursor_rect.height < @mini_help.height ? -@mini_help.height : 18) end def get_item @item_saved = [$game_party.actors[@actor_index].item_grid[@y][@x][0], $game_party.actors[@actor_index].item_grid[@y][@x][1], @x, @y] end def redraw_item(f = true) if f x = 4 + (@x * 32) y = @y * 32 else x = 4 + (@item_saved[2] * 32) y = @item_saved[3] * 32 tx = @x ty = @y @x = @item_saved[2] @y = @item_saved[3] end draw_item(@item_saved[0], @item_saved[1], @y , @x) case @item_saved[1] when "i" $game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1] when "w" $game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1] $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "e" $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "e" when "a" $game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1] $game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "r" $game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "r" $game_party.actors[@actor_index].item_grid[@y][@x + 1][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y][@x + 1][1] = "r" $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] = "r" $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][0] = @item_saved[0] $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] = "r" end @x = tx if @x != tx and tx != nil @y = ty if @y != ty and ty != nil end def empty? case @item_saved[1] when "i" return true if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" when "w" if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" and $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] == "" and $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] == "" return true end when "a" if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" and $game_party.actors[@actor_index].item_grid[@y + 1][@x][1] == "" and $game_party.actors[@actor_index].item_grid[@y + 2][@x][1] == "" and $game_party.actors[@actor_index].item_grid[@y][@x + 1][1] == "" and $game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] == "" and $game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] == "" return true end end return false end def set=(set) @x = set @y = set @mini_help.visible = (set == 0 ? true : false) end |
| | | nara bakuraMatière
Messages : 129 Date d'inscription : 20/06/2007
Caractéristiques du membre Evolution: Atome Job: XP: (20/20)
| Sujet: Re: Objets en inventaire comme Diablo Sam 30 Juin 2007 - 12:03 | |
| - Code:
-
draw_item(item_id, type, i , j) if type == "i" and $game_party.item_can_use?($data_items[item_id].id) opacity = 255 else opacity = 128 end if item_id != 0 case type when "i" x = 4 + (j * 32) y = i * 32 bitmap = RPG::Cache.icon($data_items[item_id].icon_name) @grid_color.bitmap.fill_rect(j*32+1, i*32+1, 31, 31, Color.new(0,0,200)) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) when "w" x = 4 + (j * 32) y = i * 32 bitmap = RPG::Cache.icon($data_weapons[item_id].icon_name) @grid_color.bitmap.fill_rect(j*32+1, i*32+1, 31, 95, Color.new(200,0,0)) self.contents.blt(x, y + 4 + 32, bitmap, Rect.new(0, 0, 24, 24), opacity) when "a" x = 4 + (j * 32) y = i * 32 bitmap = RPG::Cache.icon($data_armors[item_id].icon_name) @grid_color.bitmap.fill_rect(j*32+1, i*32+1, 63, 95, Color.new(0,200,0)) self.contents.blt(x + 18, y + 4 + 32, bitmap, Rect.new(0, 0, 24, 24), opacity) end end end end
class Mini_Help < Window_Base alias old_initialize initialize def initialize super(0, 0, 180, 40) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.size = 14 self.back_opacity = 170 self.z = 102 self.visible = false end def set_text(text, align = 1) # If at least one part of text and alignment differ from last time if text != @text or align != @align # Redraw text self.contents.clear #self.contents.font.color = normal_color self.contents.draw_text(4, -12, self.width - 40, 32, text, align) #self.width = self.contents.text_size(text).width @text = text @align = align @actor = nil end self.visible = true end end
class Game_Actor < Game_Battler attr_accessor :item_grid alias old_initialize initialize def initialize(actor_id) old_initialize(actor_id) @item_grid = Array.new(12) for i in 0..@item_grid.size - 1 @item_grid[i] = Array.new(13) for k in 0..@item_grid[i].size - 1 @item_grid[i][k] = Array.new(2) @item_grid[i][k][0] = 0 @item_grid[i][k][1] = "" end end end
end
class Game_Party def gain_item(item_id, n) if item_id > 0 for k in 1..n for i in 0..self.actors.size - 1 break if set_item(item_id, "i", i) == nil end end end end def gain_weapon(weapon_id, n) if weapon_id > 0 for k in 1..n for i in 0..self.actors.size - 1 break if set_item(weapon_id, "w", i) == nil end end end end def gain_armor(armor_id, n) if armor_id > 0 for k in 1..n for i in 0..self.actors.size - 1 break if set_item(armor_id, "a", i) == nil end end end end def lose_item(item_id, n, random = true) if random == true if item_id > 0 for k in 1..n del_item(item_id, "i") end end end @items[item_id] = [[item_number(item_id) + -n, 0].max, 99].min end def lose_weapon(weapon_id, n, random = true) if random == true if weapon_id > 0 for k in 1..n del_item(weapon_id, "w") end end end @weapons[weapon_id] = [[weapon_number(weapon_id) + -n, 0].max, 99].min end
def lose_armor(armor_id, n, random = true) if random == true if armor_id > 0 for k in 1..n del_item(armor_id, "a") end end end @armors[armor_id] = [[armor_number(armor_id) + -n, 0].max, 99].min end def set_item(item_id, type, i) for a in 0..self.actors[i].item_grid.size - 1 for b in 0..self.actors[i].item_grid[a].size - 1 if self.actors[i].item_grid[a][b][0] == 0 case type when "i" self.actors[i].item_grid[a][b][0] = item_id self.actors[i].item_grid[a][b][1] = type @items[item_id] = [[item_number(item_id) + 1, 0].max, 99].min return when "w" if a < self.actors[i].item_grid.size - 2 if self.actors[i].item_grid[a + 1][b][0] == 0 and self.actors[i].item_grid[a + 2][b][0] == 0
self.actors[i].item_grid[a][b][0] = item_id self.actors[i].item_grid[a][b][1] = type self.actors[i].item_grid[a + 1][b][0] = item_id self.actors[i].item_grid[a + 1][b][1] = "e" self.actors[i].item_grid[a + 2][b][0] = item_id self.actors[i].item_grid[a + 2][b][1] = "e" @weapons[item_id] = [[weapon_number(item_id) + 1, 0].max, 99].min return end end when "a" if b < self.actors[i].item_grid[a].size - 1 and a < self.actors[i].item_grid.size - 2 if self.actors[i].item_grid[a + 1][b][0] == 0 and self.actors[i].item_grid[a + 2][b][0] == 0 and self.actors[i].item_grid[a][b + 1][0] == 0 and self.actors[i].item_grid[a + 1][b + 1][0] == 0 and self.actors[i].item_grid[a + 2][b + 1][0] == 0 self.actors[i].item_grid[a][b][0] = item_id self.actors[i].item_grid[a][b][1] = type self.actors[i].item_grid[a + 1][b][0] = item_id self.actors[i].item_grid[a + 1][b][1] = "r" self.actors[i].item_grid[a + 2][b][0] = item_id self.actors[i].item_grid[a + 2][b][1] = "r" self.actors[i].item_grid[a][b + 1][0] = item_id self.actors[i].item_grid[a][b + 1][1] = "r" self.actors[i].item_grid[a + 1][b + 1][0] = item_id self.actors[i].item_grid[a + 1][b + 1][1] = "r" self.actors[i].item_grid[a + 2][b + 1][0] = item_id self.actors[i].item_grid[a + 2][b + 1][1] = "r" @armors[item_id] = [[armor_number(item_id) + 1, 0].max, 99].min return end end end end end end end def del_item(item_id, type) for i in 0..self.actors.size - 1 for a in 0..self.actors[i].item_grid.size - 1 for b in 0..self.actors[i].item_grid[a].size - 1 if self.actors[i].item_grid[a][b][0] == item_id and self.actors[i].item_grid[a][b][1] == type case type when "i" self.actors[i].item_grid[a][b][0] = 0 self.actors[i].item_grid[a][b][1] = "" return when "w" self.actors[i].item_grid[a][b][0] = 0 self.actors[i].item_grid[a][b][1] = "" self.actors[i].item_grid[a + 1][b][0] = 0 self.actors[i].item_grid[a + 1][b][1] = "" self.actors[i].item_grid[a + 2][b][0] = 0 self.actors[i].item_grid[a + 2][b][1] = "" return when "a" self.actors[i].item_grid[a][b][0] = 0 self.actors[i].item_grid[a][b][1] = "" self.actors[i].item_grid[a + 1][b][0] = 0 self.actors[i].item_grid[a + 1][b][1] = "" self.actors[i].item_grid[a + 2][b][0] = 0 self.actors[i].item_grid[a + 2][b][1] = "" self.actors[i].item_grid[a][b + 1][0] = 0 self.actors[i].item_grid[a][b + 1][1] = "" self.actors[i].item_grid[a + 1][b + 1][0] = 0 self.actors[i].item_grid[a + 1][b + 1][1] = "" self.actors[i].item_grid[a + 2][b + 1][0] = 0 self.actors[i].item_grid[a + 2][b + 1][1] = "" return end end end end end end end
class Cursor_Icon < RPG::Sprite def initialize super @color = Color.new(255,255,0,150) @rect = Rect.new(0, 0, 24, 24) end def refresh(bitmap, item) case item when "i" x = 4 y = 4 width = 32 height = 32 when "w" x = 4 y = 36 width = 32 height = 96 when "a" x = 22 y = 36 width = 64 height = 96 end if self.bitmap == nil or (self.bitmap.width != width or self.bitmap.height != height) self.bitmap = Bitmap.new(width, height) else self.bitmap.clear end self.bitmap.fill_rect(0,0,width,height, @color) self.bitmap.blt(x, y , bitmap, @rect) self.z = 9999 end end
class Window_Base def draw_actor_picture(actor, x, y) bitmap = RPG::Cache.battler(actor.character_name, actor.character_hue) cw = bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end end
class Scene_Menu def update_command # If B button was pressed if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to map screen $scene = Scene_Map.new return end # If C button was pressed if Input.trigger?(Input::C) # If command other than save or end game, and party members = 0 if $game_party.actors.size == 0 and @command_window.index < 4 # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Branch by command window cursor position case @command_window.index when 0 # item # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to item screen @command_window.active = false @status_window.active = true @status_window.index = 0 when 1 # skill # Play decision SE $game_system.se_play($data_system.decision_se) # Make status window active @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # equipment # Play decision SE $game_system.se_play($data_system.decision_se) # Make status window active @command_window.active = false @status_window.active = true @status_window.index = 0 when 3 # status # Play decision SE $game_system.se_play($data_system.decision_se) # Make status window active @command_window.active = false @status_window.active = true @status_window.index = 0 when 4 # save # If saving is forbidden if $game_system.save_disabled # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to save screen $scene = Scene_Save.new when 5 # end game # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to end game screen $scene = Scene_End.new end return end end #-------------------------------------------------------------------------- # * Frame Update (when status window is active) #-------------------------------------------------------------------------- def update_status # If B button was pressed if Input.trigger?(Input::B) # Play cancel SE $game_system.se_play($data_system.cancel_se) # Make command window active @command_window.active = true @status_window.active = false @status_window.index = -1 return end # If C button was pressed if Input.trigger?(Input::C) # Branch by command window cursor position case @command_window.index when 0 $game_system.se_play($data_system.decision_se) $scene = Scene_Item2.new(@status_window.index) when 1 # skill # If this actor's action limit is 2 or more if $game_party.actors[@status_window.index].restriction >= 2 # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to skill screen $scene = Scene_Skill.new(@status_window.index) when 2 # equipment # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to equipment screen $scene = Scene_Equip.new(@status_window.index) when 3 # status # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to status screen $scene = Scene_Status.new(@status_window.index) end return end end end |
| | | Contenu sponsorisé
| Sujet: Re: Objets en inventaire comme Diablo | |
| |
| | | | Objets en inventaire comme Diablo | |
|
Sujets similaires | |
|
Page 1 sur 1 | |
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|