Original Source
- Original title: Items in battle: problems with custom script
- Original author: Jono99
- Original date: September 14, 2016
- Source thread: https://forums.rpgmakerweb.com/threads/items-in-battle-problems-with-custom-script.68284/
- Source forum path: Game Development Engines > Ruby Game System (RGSS) Scripts > Learning Ruby and RGSSx
Summary
I'm currently working on a game where one of the mechanics is that party members can hold onto items. At the moment, I'm having a slight problem: if I try to click on an item the actor has that the inventory doesn't, nothing happens as opposed to the processing that usually happens on items when they are clicked on. Here is the code I made that I'm using (yes, I know that the party inventory system doesn't work like my script does, but I designed the inventory script with the...
Archived First Post
Here is the code I made that I'm using (yes, I know that the party inventory system doesn't work like my script does, but I designed the inventory script with the actors having a limited amount of total items as opposed to practically infinite items in the party's inventory):
------------------------Actor Inventory-------------------------
class Game_Actor
attr_reader :items
#--------------------------------------------------------------------------
# * Setup
#--------------------------------------------------------------------------
def setup(actor_id)
@items = []
@actor_id = actor_id
@name = actor.name
@nickname = actor.nickname
init_graphics
@class_id = actor.class_id
@level = actor.initial_level
@exp = {}
@equips = []
init_exp
init_skills
init_equips(actor.equips)
clear_param_plus
recover_all
end
#--------------------------------------------------------------------------
# * Gain item
#--------------------------------------------------------------------------
def gain_item(item)
if item.class == Fixnum
@items.push($data_items[item]) if @items.size < max_items
elsif item.class == RPG::Item
@items.push(item) if @items.size < max_items
end
end
#--------------------------------------------------------------------------
# * Lose item
#--------------------------------------------------------------------------
def lose_item(item)
if has_item?(item)
if item.class == Fixnum
@items.delete_first $data_items[item] # delete_first is a custom made method for the Array class that deletes the first instance of the data it's looking for.
elsif item.class == RPG::Item
@items.delete_first item
end
end
end
#--------------------------------------------------------------------------
# * Max items
#--------------------------------------------------------------------------
def max_items
return 10
end
#--------------------------------------------------------------------------
# * Has item?
#--------------------------------------------------------------------------
def has_item?(item)
if item.class == Fixnum
return @items.include?($data_items[item])
elsif item.class == RPG::Item
return @items.include?(item)
end
end
end
---------------------------------Actor Inventory Battle--------------------------------
class Window_BattleActorItem < Window_BattleItem
def show
refresh_list
@help_window.show
super
end
def make_item_list
refresh_list
end
def refresh_list
if @actor
@data = @actor.items
else
@data = []
end
@data.push(nil) if @data.size == 0
end
def draw_item(index)
item = @data[index]
if item
rect = item_rect(index)
rect.width -= 4
draw_item_name(item, rect.x, rect.y, true)
end
end
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
def ok_enabled?
true
end
end
class Scene_Battle
def create_item_window
@item_window = Window_BattleItem.new(@help_window, @info_viewport)
@item_window.set_handlerok, methodon_item_ok))
@item_window.set_handlercancel, methodon_item_cancel))
@item_window.set_handlerpageup, methodswitch_to_aitem))
@item_window.set_handlerpagedown,methodswitch_to_aitem))
@item_window.height /= 2
create_actor_item_window
end
def create_actor_item_window
@aitem_window = Window_BattleActorItem.new(@help_window, @info_viewport)
@aitem_window.set_handlerok, methodon_aitem_ok))
@aitem_window.set_handlercancel, methodon_item_cancel))
@aitem_window.set_handlerpageup, methodswitch_to_item))
@aitem_window.set_handlerpagedown,methodswitch_to_item))
@aitem_window.y += @item_window.height
@aitem_window.height /= 2
end
def switch_to_aitem
@item_window.deactivate
@aitem_window.activate
end
def switch_to_item
@aitem_window.deactivate
@item_window.activate
end
def command_item
@aitem_window.actor = BattleManager.actor
@aitem_window.refresh
@aitem_window.show
@item_window.refresh
@item_window.show.activate
end
def on_aitem_ok
@item = @aitem_window.item
BattleManager.actor.input.set_item(@item.id)
if !@item.need_selection?
@item_window.hide
@aitem_window.hide
next_command
elsif @item.for_opponent?
select_enemy_selection
else
select_actor_selection
end
$game_party.last_item.object = @item
end
end
Please help.
Protected download
Downloads / Referenced Files
Log in, then follow the RPG Maker Developers Group to see these download links.
Log in to downloadReferenced Images / Attachments
Creator Claims / Removal
If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.
Replies (0)
No replies yet.
Topic Summary
Loading summary...
